Мне нужно создать сценарий, который выполняет некоторые операции в заданной папке, но он должен включать предварительную проверку, достаточно ли места осталось перед началом операций. Имя папки представляет собой путь UNC, например. \\example-server\share1\folder\subfolder\
. Как я могу получить количество свободного места в папке?
Вещи, которые я пробовал до сих пор:
Я читал, что могу использовать gwmi
, Get-CimInstance
, Get-Volume
и Get-PSDrive
для получения информации о томе, но я не знаю, как определить том, на котором хранится папка.
Я попытался использовать эта интересная функция, GetDiskFreeSpaceEx
в своем скрипте, но, к сожалению, он вернулся с Success=false и пустым значением для «Free».
Следующее может быть не лучшим решением, но оно может сработать:
# Determine all single-letter drive names.
$takenDriveLetters = (Get-PSDrive).Name -like '?'
# Find the first unused drive letter.
# Note: In PowerShell (Core) 7+ you can simplify [char[]] (0x41..0x5a) to
# 'A'..'Z'
$firstUnusedDriveLetter = [char[]] (0x41..0x5a) |
where { $_ -notin $takenDriveLetters } | select -first 1
# Temporarily map the target UNC path to a drive letter...
$null = net use ${firstUnusedDriveLetter}: '\\example-server\share1\folder\subfolder' /persistent:no
# ... and obtain the resulting drive's free space ...
$freeSpace = (Get-PSDrive $firstUnusedDriveLetter).Free
# ... and delete the mapping again.
$null = net use ${firstUnusedDriveLetter}: /delete
$freeSpace # output
net use
-сопоставленные диски сообщают о своем свободном пространстве, в то время как те, которые установлены с помощью New-PSDrive
как диски только для PowerShell, этого не делают, в то время как они сообщают, если вы создаете их с помощью -Persist
Thanks, zett42. (что делает вызов эквивалентным net use
; из сценариев обязательно также укажите -Scope Global
, из-за ошибка, описанная в Ошибка GitHub № 15752).
Для краткости я опустил обработку ошибок.
если вы просто хотите получить размер папки, это то, что я использую github.com/gangstanthony/PowerShell/blob/master/…