测试和报告调用命令执行

时间:2019-03-29 09:36:31

标签: powershell invoke-command

我有以下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"
}

1 个答案:

答案 0 :(得分:0)

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

$false

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

If (!$command){Do stuff}