Я админ на двух серверах (Win 2008 R2). У меня есть запланированная задача по копированию больших файлов из общей папки на одном сервере на другой. Перед тем как сделать копию, я проверяю, достаточно ли свободного места на целевом диске на другом сервере. Я выполнял эти задачи под своей учетной записью и хочу перейти на системную учетную запись с более низкими привилегиями, чем я.
Я использовал следующий рецепт, чтобы получить коэффициент свободного пространства:
PowerShell.exe Get-WmiObject Win32_LogicalDisk -ComputerName <REMOTESERVER> -Filter "DeviceID='C:'" | Foreach-Object {$_.FreeSpace / $_.Size}
Он работает с моей учетной записью, но дает мне 0x80070005 (E_ACCESS DENIED) из учетной записи без прав администратора.
Следует ли мне вообще использовать для этого WMI или есть что-то попроще?
Вы можете получить размер, сопоставив диск с буквой и запросив ее с помощью командлета Get-PSDrive. Работает без прав администратора на сервере или даже без права записи в общий ресурс.
net use T: \\server\share
$freebytes=(Get-PSDrive T).Free
net use T: /delete
Вы можете использовать WMI для получения свободного дискового пространства в качестве пользователя без прав администратора, но вам в первую очередь необходимо изменить разрешения WMI на удаленном сервере.
Из файла wmimgmt.msc на удаленном сервере, затем щелкните правой кнопкой мыши «WMI Control (Local)» и выберите вкладку «Безопасность», затем выделите CIMv2 и нажмите кнопку «Безопасность». Отсюда дайте пользователю, которому вы хотите иметь возможность запускать сценарий, разрешение «Удаленное включение», и сценарий должен иметь возможность получать информацию удаленного WMI.
Существует EXE-файл Freedisk, не основанный на WMI, который работает без прав администратора.
https://technet.microsoft.com/en-us/library/cc731162.aspx
Он возвращает 0, если места достаточно, и 1, если места недостаточно.
PS C:\temp> freedisk \\server1\share1 9mb
OK
PS C:\temp> $lastExitCode
0
PS C:\temp> freedisk \\server1\share1 99999999999999999mb
To small!!
PS C:\temp> $lastExitCode
1