我正在创建一个菜单,并有一个显示计算机名称和操作系统版本的选项和一个显示磁盘空间的选项。我需要在本地或远程计算机上完成选项。它适用于本地机器,但我不确定如何允许在远程机器上完成这些选项
'1' {
cls
Write-Host -NoNewLine "OS Version: "
Get-CimInstance Win32_OperatingSystem | Select-Object Caption | ForEach{ $_.Caption }
Write-Host ""
Write-Host -NoNewLine "Computer Name: "
Get-CimInstance Win32_OperatingSystem | Select-Object CSName | ForEach{ $_.CSName }
Write-Host ""
} '2' {
cls
gwmi win32_logicaldisk | Format-Table DeviceId, MediaType, @{n="Size";e={[math]::Round($_.Size/1GB,2)}},@{n="FreeSpace";e={[math]::Round($_.FreeSpace/1GB,2)}}
既然你已经提到它在你的本地工作,我就不碰那部分了。只需将整个代码包装为函数,$ComputerName作为参数即可。
如果您属于域管理员,或者您没有任何权限问题,则可以使用相同的凭据远程获取信息。
像这样使用:
function Get-DiskInfo($drive,$computername)
{
##-- Local system Validation
if((gwmi win32_computersystem).Name -eq $computername)
{
$diskReport = Get-WmiObject Win32_logicaldisk
$drive = $diskReport | Where-Object { $_.DeviceID -eq $drive}
$result = @{
Size = $drive.Size
FreeSpace = $drive.Freespace
}
return $result
}
else
{
$diskReport = Get-WmiObject Win32_logicaldisk -ComputerName $ComputerName
$drive = $diskReport | Where-Object { $_.DeviceID -eq $drive}
$result = @{
Size = $drive.Size
FreeSpace = $drive.Freespace
}
return $result
}
}
调用函数:
Get-DiskInfo C: localhost
由于您使用的是所有 WMI 调用,因此不需要使用 Invoke-Command。您可以直接使用 get-wmiobject 中的 -ComputerName 开关远程获取所有详细信息,也可以将特定凭据作为 -credential 传递
希望它能帮助您理解逻辑。