āĻĒāĻžāĻ“āĻ¯āĻŧāĻžāĻ°āĻļā§‡āĻ˛ āĻ‡āĻ¨āĻ­ā§‹āĻ•-āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĨā§‡āĻ•ā§‡ SQL āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻāĻœā§‡āĻ¨ā§āĻŸā§‡ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ¨ āĻĢā§‡āĻ°āĻ¤ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻšā§āĻ›ā§‡

āĻāĻ•āĻžāĻ§āĻŋāĻ• MS-SQL āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻŦā§āĻ¯āĻžāĻ•āĻ†āĻĒ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ†āĻŽāĻŋ āĻĻā§‚āĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ•āĻ˛ā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ Powershell-āĻ āĻŽāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻĒāĻžāĻ¸ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻŸāĻŋ āĻ…āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻ…āĻ¨ā§‡āĻ• āĻ¸āĻŽāĻ¯āĻŧ āĻŦā§āĻ¯āĻ¯āĻŧ āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻ¤āĻžāĻ‡ āĻāĻŸāĻŋ āĻĻāĻ°āĻ•āĻžāĻ°ā§€ āĻšāĻ˛ā§‡ āĻ†āĻŽāĻŋ āĻ¨āĻŋāĻœā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ…āĻ¨ā§āĻ¸ā§āĻŽāĻžāĻ°āĻ• āĻ˛āĻŋāĻ–āĻ›āĻŋ āĻ…āĻ¨ā§āĻ¯ āĻ•āĻžāĻ°ā§‹ āĻ•āĻžāĻ›ā§‡.

āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻ†āĻ¸ā§āĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻļā§āĻ°ā§ āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻšāĻžāĻ˛āĻžāĻ‡:

$exitcode = $args[0]
Write-Host 'Out to host.'
Write-Output 'Out to output.'
Write-Host ('ExitCode: ' + $exitcode)
Write-Output $exitcode
$host.SetShouldExit($exitcode)

āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ CMD āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦ, āĻ†āĻŽāĻŋ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻŦāĻžāĻ° āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻŦ āĻ¨āĻž:

@Echo OFF
PowerShell .TestOutput1.ps1 1
ECHO ERRORLEVEL=%ERRORLEVEL%

āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤āĻ—ā§āĻ˛āĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻŦ:

Out to host.
Out to output.
ExitCode: 1
1
ERRORLEVEL=1


āĻāĻ–āĻ¨ WSMAN (āĻĻā§‚āĻ°āĻŦāĻ°ā§āĻ¤ā§€āĻ­āĻžāĻŦā§‡) āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻāĻ•āĻ‡ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹ āĻ¯āĻžāĻ•:

Invoke-Command -ComputerName . -ScriptBlock { &'D:sqlagentTestOutput1.ps1' $args[0] } -ArgumentList $args[0]

āĻāĻŦāĻ‚ āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĢāĻ˛āĻžāĻĢāĻ˛:

Out to host.
Out to output.
ExitCode: 2
2
ERRORLEVEL=0

āĻ—ā§āĻ°ā§‡āĻŸ, Errorlevel āĻ•ā§‹āĻĨāĻžāĻ“ āĻ…āĻĻā§ƒāĻļā§āĻ¯ āĻšāĻ¯āĻŧā§‡ āĻ—ā§‡āĻ›ā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻĨā§‡āĻ•ā§‡ āĻŽāĻžāĻ¨ āĻĒā§‡āĻ¤ā§‡ āĻšāĻŦā§‡! āĻ†āĻ¸ā§āĻ¨ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ¨āĻ•āĻļāĻž āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§āĻ¨:

$res=Invoke-Command -ComputerName . -ScriptBlock { &'D:sqlagentTestOutput1.ps1' $args[0] } -ArgumentList $args[0]

āĻāĻŸāĻŋ āĻ†āĻ°āĻ“ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧāĨ¤ āĻ†āĻ‰āĻŸāĻĒā§āĻŸā§‡ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻŸāĻŋ āĻ•ā§‹āĻĨāĻžāĻ“ āĻ…āĻĻā§ƒāĻļā§āĻ¯ āĻšāĻ¯āĻŧā§‡ āĻ—ā§‡āĻ›ā§‡:

Out to host.
ExitCode: 2
ERRORLEVEL=0

āĻāĻ–āĻ¨, āĻāĻ•āĻŸāĻŋ āĻ˛āĻŋāĻ°āĻŋāĻ•ā§āĻ¯āĻžāĻ˛ āĻĄāĻŋāĻ—ā§āĻ°ā§‡āĻļāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§‡, āĻ†āĻŽāĻŋ āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻ•āĻ°āĻŦ āĻ¯ā§‡ āĻ¯āĻĻāĻŋ āĻāĻ•āĻŸāĻŋ āĻĒāĻžāĻ“āĻ¯āĻŧāĻžāĻ°āĻļā§‡āĻ˛ āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡āĻ° āĻ­āĻŋāĻ¤āĻ°ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ˛āĻŋāĻ–ā§āĻ¨-āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻŦāĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻ…āĻ­āĻŋāĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋ āĻ˛āĻŋāĻ–ā§āĻ¨ āĻ¯ā§‡āĻŸāĻŋ āĻ•ā§‹āĻ¨ā§‹ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻ¨āĻž āĻ•āĻ°ā§‡ (āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻšā§āĻ¯āĻžāĻ¨ā§‡āĻ˛ā§‡ āĻ†āĻ‰āĻŸāĻĒā§āĻŸāĻ•ā§‡ āĻŦā§‹āĻāĻžāĻ¯āĻŧ), āĻ¤āĻžāĻ°āĻĒāĻ°āĻ“ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻ¸āĻŽāĻ¯āĻŧāĻ“, āĻ•āĻŋāĻ›ā§āĻ‡ āĻĒāĻ°ā§āĻĻāĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻšāĻŦā§‡ āĻ¨āĻž! āĻāĻŸāĻŋ āĻĒāĻžāĻ“āĻ¯āĻŧāĻžāĻ°āĻļā§‡āĻ˛ āĻĒāĻžāĻ‡āĻĒāĻ˛āĻžāĻ‡āĻ¨ āĻ†āĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āĻšāĻžāĻ°ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŋāĻŖāĻ¤āĻŋ - āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻĒāĻžāĻ‡āĻĒāĻ˛āĻžāĻ‡āĻ¨ āĻĨāĻžāĻ•ā§‡, āĻāĻŸāĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ°ā§‡ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻāĻ¤ā§‡ āĻ¯āĻž āĻ•āĻŋāĻ›ā§ āĻ¯āĻžāĻ¯āĻŧ āĻ¤āĻž āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ā§‡āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŦāĻŋāĻŦā§‡āĻšāĻŋāĻ¤ āĻšāĻ¯āĻŧ, āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻ° āĻāĻ•āĻ‡ āĻ¸āĻžāĻĨā§‡ āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ āĻŽāĻžāĻ¨ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡ āĻĒāĻžāĻ‡āĻĒāĻ˛āĻžāĻ‡āĻ¨ āĻļā§‡āĻˇ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻāĻŦāĻ‚ āĻ•āĻ˛āĻŋāĻ‚ āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°ā§‡āĨ¤ āĻŦā§āĻ¯āĻžāĻ–ā§āĻ¯āĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻ¸ā§āĻ¨ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻŸāĻŋ āĻšāĻžāĻ˛āĻžāĻ‡:

Function Write-Log {
  Param( [Parameter(Mandatory=$false, ValueFromPipeline=$true)] [String[]] $OutString = "`r`n" )
  Write-Output ("Function: "+$OutString)
  Return "ReturnValue"
}
Write-Output ("Main: "+"ParameterValue")
$res = Write-Log "ParameterValue"
$res.GetType()
$res.Length
$res | Foreach-Object { Write-Host ("Main: "+$_) }

āĻāĻŦāĻ‚ āĻāĻ–āĻžāĻ¨ā§‡ āĻĢāĻ˛āĻžāĻĢāĻ˛:

Main: ParameterValue

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array
2
Main: Function: ParameterValue
Main: ReturnValue

āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĢāĻžāĻ‚āĻļāĻ¨ (āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻŦāĻĄāĻŋ) āĻāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻĒāĻžāĻ‡āĻĒāĻ˛āĻžāĻ‡āĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻ°āĻž āĻ¸āĻŋāĻāĻŽāĻĄāĻŋ āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ°āĻĨāĻŽ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻšāĻžāĻ˛āĻžāĻ‡, āĻ†āĻ‰āĻŸāĻĒā§āĻŸāĻŸāĻŋāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻĒā§āĻ¨āĻƒāĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°ā§‡,

PowerShell .TestOutput1.ps1 1 > TestOutput1.txt

āĻ¤āĻžāĻ°āĻĒāĻ° āĻ†āĻŽāĻ°āĻž āĻĒāĻ°ā§āĻĻāĻžāĻ¯āĻŧ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻŦ

ERRORLEVEL=1

āĻāĻŦāĻ‚ āĻĢāĻžāĻ‡āĻ˛ā§‡

Out to host.
Out to output.
ExitCode: 1
1

āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻ°āĻž āĻĒāĻžāĻ“āĻ¯āĻŧāĻžāĻ°āĻļā§‡āĻ˛ āĻĨā§‡āĻ•ā§‡ āĻ…āĻ¨ā§āĻ°ā§‚āĻĒ āĻ•āĻ˛ āĻ•āĻ°āĻŋ

PS D:sqlagent> .TestOutput1.ps1 1 > TestOutput1.txt

āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŸāĻŋ āĻĒāĻ°ā§āĻĻāĻžāĻ¯āĻŧ āĻšāĻŦā§‡

Out to host.
ExitCode: 1

āĻāĻŦāĻ‚ āĻĢāĻžāĻ‡āĻ˛ā§‡

Out to output.
1

āĻāĻŸāĻŋ āĻ˜āĻŸā§‡ āĻ•āĻžāĻ°āĻŖ āĻ¸āĻŋāĻāĻŽāĻĄāĻŋ āĻĒāĻžāĻ“āĻ¯āĻŧāĻžāĻ°āĻļā§‡āĻ˛ āĻšāĻžāĻ˛ā§ āĻ•āĻ°ā§‡, āĻ¯āĻž āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€āĻ° āĻ…āĻ¨ā§āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ¤ā§‡ āĻĻā§āĻŸāĻŋ āĻĨā§āĻ°ā§‡āĻĄ (āĻšā§‹āĻ¸ā§āĻŸ āĻāĻŦāĻ‚ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ) āĻŽāĻŋāĻļā§āĻ°āĻŋāĻ¤ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻ¸āĻŋāĻāĻŽāĻĄāĻŋāĻ•ā§‡ āĻĻā§‡āĻ¯āĻŧ, āĻ¯āĻž āĻāĻŸāĻŋ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ•āĻŋāĻ›ā§ āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻĒāĻžāĻ āĻžāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻĒāĻžāĻ“āĻ¯āĻŧāĻžāĻ°āĻļā§‡āĻ˛ āĻĨā§‡āĻ•ā§‡ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻžāĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, āĻāĻ‡ āĻĻā§āĻŸāĻŋ āĻĨā§āĻ°ā§‡āĻĄ āĻ†āĻ˛āĻžāĻĻāĻžāĻ­āĻžāĻŦā§‡ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨, āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ¤ā§€āĻ• āĻĒā§āĻ¨āĻƒāĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ†āĻ‰āĻŸāĻĒā§āĻŸāĻ•ā§‡ āĻĒā§āĻ°āĻ­āĻžāĻŦāĻŋāĻ¤ āĻ•āĻ°ā§‡āĨ¤

āĻŽā§‚āĻ˛ āĻŦāĻŋāĻˇāĻ¯āĻŧā§‡ āĻĢāĻŋāĻ°ā§‡ āĻ†āĻ¸āĻž, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŽāĻ¨ā§‡ āĻ°āĻžāĻ–āĻž āĻ¯āĻžāĻ• āĻ¯ā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻžāĻ°āĻļā§‡āĻ˛ā§‡āĻ° āĻ­āĻŋāĻ¤āĻ°ā§‡ .NET āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸ āĻŽāĻĄā§‡āĻ˛āĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖāĻ°ā§‚āĻĒā§‡ āĻāĻ•āĻŸāĻŋ āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻžāĻ°ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ (āĻāĻ•āĻŸāĻŋ āĻ“āĻāĻ¸), āĻ¯āĻ–āĻ¨ WSMAN-āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻĻā§‚āĻ°āĻŦāĻ°ā§āĻ¤ā§€āĻ­āĻžāĻŦā§‡ āĻ•ā§‹āĻĄ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧ, āĻ¤āĻ–āĻ¨ XML āĻ¸āĻŋāĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛āĻžāĻ‡āĻœā§‡āĻļāĻ¨ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻŦāĻ¸ā§āĻ¤ā§āĻ° āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻ˜āĻŸā§‡, āĻ¯āĻž āĻ…āĻ¨ā§‡āĻ• āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻ†āĻ—ā§āĻ°āĻš āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ†āĻ¸ā§‡āĨ¤ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ—āĻŦā§‡āĻˇāĻŖāĻžāĻ¯āĻŧāĨ¤ āĻ†āĻ¸ā§āĻ¨ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ•ā§‹āĻĄāĻŸāĻŋ āĻšāĻžāĻ˛āĻŋāĻ¯āĻŧā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ—ā§āĻ˛āĻŋ āĻšāĻžāĻ˛āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ‡:

$res=Invoke-Command -ComputerName . -ScriptBlock { &'D:sqlagentTestOutput1.ps1' $args[0] } -ArgumentList $args[0]
$res.GetType()
$host.SetShouldExit($res)

āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒāĻ°ā§āĻĻāĻžāĻ¯āĻŧ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡:

Out to host.

ExitCode: 3

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array
НĐĩ ŅƒĐ´Đ°ĐĩŅ‚ŅŅ ĐŋŅ€ĐĩОйŅ€Đ°ĐˇĐžĐ˛Đ°Ņ‚ŅŒ Đ°Ņ€ĐŗŅƒĐŧĐĩĐŊŅ‚ "exitCode", ŅĐž СĐŊĐ°Ņ‡ĐĩĐŊиĐĩĐŧ: "System.Object[]", Đ´ĐģŅ "SetShouldExit" в Ņ‚иĐŋ "System.Int32": "НĐĩ ŅƒĐ´Đ°ĐĩŅ‚ŅŅ ĐŋŅ€ĐĩОйŅ€Đ°ĐˇĐžĐ˛Đ°Ņ‚ŅŒ СĐŊĐ°Ņ‡ĐĩĐŊиĐĩ "System.Object[]" Ņ‚иĐŋĐ° "System.Object[]" в Ņ‚иĐŋ "System
.Int32"."
D:sqlagentTestOutput3.ps1:3 СĐŊĐ°Đē:1
+ $host.SetShouldExit($res)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument

ERRORLEVEL=0

āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤ āĻĢāĻ˛āĻžāĻĢāĻ˛! āĻāĻ° āĻŽāĻžāĻ¨ā§‡ āĻšāĻ˛ āĻ‡āĻ¨āĻ­ā§‹āĻ•-āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ•āĻ˛ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻĒāĻžāĻ‡āĻĒāĻ˛āĻžāĻ‡āĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻĻā§āĻŸāĻŋ āĻĨā§āĻ°ā§‡āĻĄā§‡ (āĻšā§‹āĻ¸ā§āĻŸ āĻāĻŦāĻ‚ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ) āĻŦāĻŋāĻ­āĻžāĻœāĻ¨ āĻŦāĻœāĻžāĻ¯āĻŧ āĻ°āĻžāĻ–āĻž āĻšāĻ¯āĻŧ, āĻ¯āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸āĻžāĻĢāĻ˛ā§āĻ¯ā§‡āĻ° āĻ†āĻļāĻž āĻĻā§‡āĻ¯āĻŧāĨ¤ āĻ†āĻ¸ā§āĻ¨ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻ¸ā§āĻŸā§āĻ°ā§€āĻŽā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ¨ āĻ›ā§‡āĻĄāĻŧā§‡ āĻĻā§‡āĻ“āĻ¯āĻŧāĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻŋ, āĻ¯āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ°āĻž āĻĻā§‚āĻ°āĻŦāĻ°ā§āĻ¤ā§€āĻ­āĻžāĻŦā§‡ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹ āĻĒā§āĻ°āĻĨāĻŽ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻŸāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻŦ:

$exitcode = $args[0]
Write-Host 'Out to host.'
#Write-Output 'Out to output.'
Write-Host ('ExitCode: ' + $exitcode)
Write-Output $exitcode
$host.SetShouldExit($exitcode)

āĻ†āĻ¸ā§āĻ¨ āĻāĻŸāĻŋ āĻāĻ­āĻžāĻŦā§‡ āĻšāĻžāĻ˛āĻžāĻ‡:

$res=Invoke-Command -ComputerName . -ScriptBlock { &'D:sqlagentTestOutput1.ps1' $args[0] } -ArgumentList $args[0]
$host.SetShouldExit($res)

āĻāĻŦāĻ‚... āĻšā§āĻ¯āĻžāĻ, āĻāĻŸāĻž āĻāĻ•āĻŸāĻž āĻŦāĻŋāĻœāĻ¯āĻŧā§‡āĻ° āĻŽāĻ¤ āĻŽāĻ¨ā§‡ āĻšāĻšā§āĻ›ā§‡!

Out to host.
ExitCode: 4

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Int32                                    System.ValueType


ERRORLEVEL=4

āĻ•āĻŋ āĻ˜āĻŸā§‡āĻ›ā§‡ āĻ¤āĻž āĻŦā§‡āĻ° āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻž āĻ¯āĻžāĻ•āĨ¤ āĻ†āĻŽāĻ°āĻž āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻžāĻ°āĻļā§‡āĻ˛āĻ•ā§‡ āĻ•āĻ˛ āĻ•āĻ°ā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ, āĻ¯āĻž āĻ°āĻŋāĻŽā§‹āĻŸ āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻžāĻ°ā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻžāĻ°āĻļā§‡āĻ˛āĻ•ā§‡ āĻ•āĻ˛ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ¸ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°ā§‡āĨ¤ āĻ°āĻŋāĻŽā§‹āĻŸ āĻŽā§‡āĻļāĻŋāĻ¨ āĻĨā§‡āĻ•ā§‡ āĻĻā§āĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ°ā§€āĻŽ (āĻšā§‹āĻ¸ā§āĻŸ āĻāĻŦāĻ‚ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ) āĻ¸āĻŋāĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛āĻžāĻ‡āĻœ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ āĻāĻŦāĻ‚ āĻĒāĻŋāĻ›āĻ¨ā§‡ āĻĒāĻžāĻ¸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛, āĻ¯āĻ–āĻ¨ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻ¸ā§āĻŸā§āĻ°ā§€āĻŽ, āĻāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻāĻ•āĻ• āĻĄāĻŋāĻœāĻŋāĻŸāĻžāĻ˛ āĻŽāĻžāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡, āĻŸāĻžāĻ‡āĻĒ Int32 āĻ¤ā§‡ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ āĻāĻŦāĻ‚ āĻāĻ‡āĻ­āĻžāĻŦā§‡ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤āĻŋāĻ° āĻĻāĻŋāĻ•ā§‡ āĻšāĻ˛ā§‡ āĻ—āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ āĻāĻŦāĻ‚ āĻ—ā§āĻ°āĻšāĻŖāĻ•āĻžāĻ°ā§€ āĻĒāĻ•ā§āĻˇ āĻāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻ•āĻ˛āĻžāĻ° āĻĒāĻžāĻ“āĻ¯āĻŧāĻžāĻ°āĻļā§‡āĻ˛ā§‡āĻ° āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨ āĻ•ā§‹āĻĄ āĻšāĻŋāĻ¸āĻžāĻŦā§‡āĨ¤

āĻāĻŦāĻ‚ āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻšā§‡āĻ• āĻšāĻŋāĻ¸āĻžāĻŦā§‡, āĻ†āĻ¸ā§āĻ¨ āĻāĻ¸āĻ•āĻŋāĻ‰āĻāĻ˛ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻĒāĻžāĻ ā§āĻ¯ āĻ¸āĻš “āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻŋāĻ‚ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ (cmdexec)” āĻŸāĻžāĻ‡āĻĒ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻāĻ•-āĻĒāĻĻāĻ•ā§āĻˇā§‡āĻĒ āĻ•āĻžāĻœ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŋ:

PowerShell -NonInteractive -NoProfile "$res=Invoke-Command -ComputerName BACKUPSERVER -ConfigurationName SQLAgent -ScriptBlock {&'D:sqlagentTestOutput1.ps1' 6}; $host.SetShouldExit($res)"

āĻšā§āĻ°āĻ°ā§‡! āĻāĻ•āĻŸāĻŋ āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœāĻŸāĻŋ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ˛āĻ—ā§‡ āĻĒāĻžāĻ ā§āĻ¯:

ВŅ‹ĐŋĐžĐģĐŊŅĐĩŅ‚ŅŅ ĐžŅ‚ иĐŧĐĩĐŊи ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ: DOMAINagentuser. Out to host. ExitCode: 6.  Код СавĐĩŅ€ŅˆĐĩĐŊиŅ ĐŋŅ€ĐžŅ†ĐĩŅŅĐ° 6.  ШаĐŗ СавĐĩŅ€ŅˆĐ¸ĐģŅŅ Ņ ĐžŅˆĐ¸ĐąĐēОК.

āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ā§‡:

  • āĻ˛āĻŋāĻ–ā§āĻ¨-āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻāĻĄāĻŧāĻŋāĻ¯āĻŧā§‡ āĻšāĻ˛ā§āĻ¨ āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻ¸āĻžāĻ‡āĻ¨āĻŽā§‡āĻ¨ā§āĻŸ āĻ›āĻžāĻĄāĻŧāĻž āĻāĻ•ā§āĻ¸āĻĒā§āĻ°ā§‡āĻļāĻ¨ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°ā§āĻ¨āĨ¤ āĻ¸āĻšā§‡āĻ¤āĻ¨ āĻĨāĻžāĻ•ā§āĻ¨ āĻ¯ā§‡ āĻāĻ‡ āĻ•ā§‹āĻĄāĻŸāĻŋ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡āĻ° āĻ…āĻ¨ā§āĻ¯ āĻ•ā§‹āĻĨāĻžāĻ“ āĻ¸āĻ°āĻžāĻ¨ā§‹ āĻšāĻ˛ā§‡ āĻ…āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻļāĻŋāĻ¤ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤
  • āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛ āĻ˛āĻžā§āĻšā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻ¯āĻŧ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ…āĻŸā§‹āĻŽā§‡āĻļāĻ¨ āĻŽā§‡āĻ•āĻžāĻ¨āĻŋāĻœāĻŽāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻļā§‡āĻˇāĻ¤ WINRM-āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻĻā§‚āĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ•āĻ˛āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡, āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§āĻ¨/āĻ•ā§āĻ¯āĻžāĻšā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨ āĻ¯ā§‡, āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ āĻŦāĻŋāĻ•āĻžāĻļā§‡, āĻāĻ‡ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻŸāĻŋ āĻ āĻŋāĻ• āĻāĻ•āĻŸāĻŋ āĻ†āĻĻāĻŋāĻŽ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻŽāĻžāĻ¨ āĻĒāĻžāĻ āĻžāĻ¯āĻŧāĨ¤ . āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸āĻŋāĻ• āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻ° āĻ¸ā§āĻ¤āĻ° āĻĒā§‡āĻ¤ā§‡ āĻšāĻžāĻ¨ āĻ¤āĻŦā§‡ āĻāĻ‡ āĻŽāĻžāĻ¨āĻŸāĻŋ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻ¸āĻžāĻ‚āĻ–ā§āĻ¯āĻŋāĻ• āĻšāĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨