我有一个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可以帮助解决这个问题?