测试和报告调用命令执行

问题描述 投票:0回答:1

我有以下PowerShell脚本创建与Windows服务器管理员帐户的会话。我想报告Invoke-command失败的错误并将其保存在文件中下面是我写的代码,但如果我篡改例如.json文件(设置错误的用户名),执行失败并且未创建error_report.txt

#Param(
$user = "lamda"
#)
$user_domain = (Get-WmiObject Win32_ComputerSystem).Domain
$user_computer = (Get-WmiObject Win32_ComputerSystem).Name
$file = "error_report.txt"
If ((Test-Path "creds.json") -eq $True) 
{
$jsonfile = Get-ChildItem creds.json 

if ($jsonfile.Length -eq 0) 
{
   #$file = "error_report.txt"
   Set-Content -Path $file -Value "Error:The file 'creds.json' is empty"
   break

}
else
{
   $creds= (Get-Content creds.json | Out-String | ConvertFrom-Json)
   $admin = $creds.username
   $passwd = $creds.password
   if (($admin) -and ($passwd))
   { 
     $Password = ConvertTo-SecureString -String $passwd -AsPlainText -Force
     $credential = [pscredential]::new($admin,$Password)
     $command = Invoke-Command -ComputerName Server.$user_domain -FilePath 
     C:\SECnology\Data\Utilities\Updating.ps1 -ArgumentList 
     $user,$admin,$user_computer -Credential $credential 
     If ($command -eq $false)
     { 
      $file = "error_report.txt"
      Set-Content -Path $file -Value "Error:Session between user and server 
      could not be created,please check your Credentials"
     }
     break

   }
   elseif (([string]::IsNullOrEmpty($admin)) -or ([string 
   ]::IsNullOrEmpty($passwd))) 
   {
      #$file = "error_report.txt"
      Set-Content -Path $file -Value "Error:One object of 'creds.json' seems 
      to be empty.Please check your file "
   }
}
break
}
else 
{
#$file = "error_report.txt"
Set-Content -Path $file -Value "Error:The file 'creds.json' does not exist"
}
powershell invoke-command
1个回答
0
投票

我认为问题在于你在if语句中定义条件的方式。你使用-eq $false但是如果连接失败,它不会将command的值设置为$false它将命令保留为null,因为它不返回任何值(它错误)。您可以尝试在if语句中使用null运算符(!),以便:

If (!$command){Do stuff}

或者,您可以为调用命令提供一个错误变量,并在运行时检查它是否具有值。

$command = Invoke-Command -ComputerName Server.$user_domain -FilePath 
     C:\SECnology\Data\Utilities\Updating.ps1 -ArgumentList 
     $user,$admin,$user_computer -Credential $credential -ErrorVariable TheError
     If ($TheError)
     {Do stuff}
© www.soinside.com 2019 - 2024. All rights reserved.