我有一个调用另一个 powershell 脚本的 powershell 脚本。
第一个脚本使用 IP 地址调用,该地址被传递给第二个脚本。第二个脚本应该以 Domain\User 形式返回 userId
第一个脚本使用 ProcessStartInfo 和 Process 来获取提升的凭据以调用第二个脚本
# part of first script
$startInfo = New-Object System.Diagnostics.ProcessStartInfo
$startInfo.FileName = "powershell.exe"
$startInfo.Arguments = "C:\script\second_script.ps1 "
$startInfo.RedirectStandardOutput = $true
$startInfo.UseShellExecute = $false
$startInfo.CreateNoWindow = $false
$startInfo.Username = Service_Account
$startInfo.Domain = Domain
$startInfo.Password = password
$process = New-Object System.Diagnostics.Process
$process.StartInfo = $startInfo
$process.Start() | Out-Null
$standardOut = $process.StandardOutput.ReadToEnd()
$process.WaitForExit()
第二个脚本有很多try-catch块,比如检查能不能ping通机器,检查能不能访问WMI
# part of second
# Can we ping the machine?
try{
Test-Connection $Sender_IP -count 1 -ErrorAction Stop | out-null
}
catch [Exception]
{
$userId = "Unknown/CannotPing "
return $output = "userId=" + $userId
}
try
{
<#Gather information on the computer corresponding to $Sender_IP#>
$Win32OS = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $Sender_IP -ErrorAction Stop
}
catch [Exception]
{
$userId = "Unknown/CannotDetectOS "
return $output = "userId=" + $userId
}
该脚本无法访问多个 IP 地址的 WMI。当我尝试通过使用服务帐户手动远程访问 IP 地址进行故障排除时,我无法做到。
现在,我正在尝试为脚本找出一种方法来检查它是否可以对 IP 地址进行身份验证。如果脚本无法对 IP 地址进行身份验证,它应该抛出异常,甚至不检查它是否可以访问 WMI。
哪些 cmdlet 可以帮助解决这个问题?