如何在没有pipe理员权限的情况下获得远程磁盘的可用空间? (视窗)

我是两台服务器上的pipe理员(Win 2008 R2)。 我有一个计划任务,将大型文件从一台服务器上的共享复制到另一台服务器上。 在执行复制之前,我检查另一台服务器上的目标磁盘是否有足够的可用空间。 我一直在我自己的帐户下运行这些任务,并想改变为比我低的权限的系统帐户。

我一直在使用下面的配方来获得自由空间比例:

PowerShell.exe Get-WmiObject Win32_LogicalDisk -ComputerName <REMOTESERVER> -Filter "DeviceID='C:'" | Foreach-Object {$_.FreeSpace / $_.Size} 

它适用于我的帐户,但给我0x80070005(E_ACCESS DENIED)从非pipe理员帐户。

我甚至应该为此使用WMI还是有一些更简单?

您可以使用WMI作为非pipe理用户获得可用磁盘空间,但首先需要更改远程服务器上的WMI权限。

从远程服务器上的wmimgmt.msc,然后右键单击“WMI Control(本地)”,然后select安全选项卡,然后突出显示CIMv2并单击“安全”button。 从这里给用户你希望能够运行脚本作为“远程启用”权限,脚本应该能够获得远程WMI信息。

您可以通过将驱动器映射到一个字母并使用Get-PSDrive cmdlet查询来获取大小。 在服务器上无需pipe理员访问权限,甚至无法写入对共享的访问权限。

 net use T: \\server\share $freebytes=(Get-PSDrive T).Free net use T: /delete 

有一个非WMI的EXE名为Freedisk,没有pipe理员权限。
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