如何在没有管理员权限的情况下获取远程磁盘的可用空间?(Windows)

如何在没有管理员权限的情况下获取远程磁盘的可用空间?(Windows)

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

我一直在使用以下方法来获取可用空间比率:

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

它在我的帐户上运行,但从非管理员帐户给我 0x80070005(E_ACCESS DENIED)。

我是否应该为此使用 WMI 或者有更简单的方法?

答案1

您可以使用 WMI 以非管理员用户身份获取可用磁盘空间,但首先需要更改远程服务器上的 WMI 权限。

从远程服务器上的 wmimgmt.msc,然后右键单击“WMI 控制(本地)”,并选择“安全”选项卡,然后突出显示 CIMv2 并单击“安全”按钮。从这里向您希望能够以“远程启用”权限运行脚本的用户授予权限,并且脚本应该能够获取远程 WMI 信息。

答案2

您可以通过将驱动器映射到字母并使用 Get-PSDrive cmdlet 进行查询来获取大小。无需服务器上的管理员访问权限,甚至无需共享的写访问权限即可工作。

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

答案3

有一个非基于 WMI 的 EXE 称为 Freedisk,无需管理员权限即可运行。
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

相关内容