我有一个简单的PS脚本来查询卷大小和用法:
<#
.SYNOPSIS
This is a simple Powershell script to display Free space on a remote machine (in GB and percentage).
.DESCRIPTION
The script uses WMI. It excludes Zero size volumes (usually CD/DVD drives).
Parameters: Computername (remote computer FQDN).
The result is sorted by % free space
.EXAMPLE
Get-VolumeFreeSpace -ComputerName dc.contoso.local -Creds contoso\superadmin
Result:
Device Size (GBs) Free (GBs) Free %
------ ---------- ---------- ------
C: 70 50 71
D: 50 49 98
.NOTES
#>
Function Get-VolumeFreeSpace {
Param(
[string]$Computername
)
Get-WmiObject -Class Win32_LogicalDisk -Namespace "root\cimv2" -ComputerName $Computername | where {$_.Size -gt 0} |
Select @{Name="Device";E={$_.DeviceID.Trim()}},
@{Name="Size (GBs)";E={[math]::Round($_.Size / 1GB)}},
@{Name="Free (GBs)";E={[math]::Round($_.FreeSpace / 1GB)}},
@{Name="Free %";E={[math]::Round(($_.FreeSpace*100)/($_.Size))}} | Sort-Object "Free %" | ft -autosize
}
我原来有一个$ Creds参数来传递GWMI凭证,以防活动用户不在,并且要查询服务器的管理员但是假设该用户有一个他/她可以用来查询服务器的管理员帐户。
这里的问题是,如果我添加$ Creds参数,如果需要凭据,它将触发nomatter。
我想要的是什么:
检查执行该功能的用户是否是管理用户。它们都以某些特定字母开头:admXXXX,admYYYY等。因此,我们的想法是对执行用户进行字符串验证,如果其名称以&#34; adm&#34;开头。继续WMI查询,如果没有,请询问凭据。基本上,使$ Creds参数成为条件。
谢谢!
答案 0 :(得分:1)
我通常使用的方法是使用函数的可选参数,splatting。
Function Get-VolumeFreeSpace {
Param(
[string]$Computername,
[PSCredential]$Credential
)
$params = @{
Class = 'Win32_LogicalDisk'
Namespace = 'root\cimv2'
ComputerName = $ComputerName
}
if ($Credential) {
$params.Credential = $Credential
}
Get-WmiObject @params | where {$_.Size -gt 0} |
Select @{Name="Device";E={$_.DeviceID.Trim()}},
@{Name="Size (GBs)";E={[math]::Round($_.Size / 1GB)}},
@{Name="Free (GBs)";E={[math]::Round($_.FreeSpace / 1GB)}},
@{Name="Free %";E={[math]::Round(($_.FreeSpace*100)/($_.Size))}} | Sort-Object "Free %" | ft -autosize
}
请注意,您也不必展开每个参数,您可以将其混淆:
$params = @{
Class = 'Win32_LogicalDisk'
Namespace = 'root\cimv2'
}
if ($Credential) {
$params.Credential = $Credential
}
Get-WmiObject @params -ComputerName $Computer