เจชเจพเจตเจฐเจธเจผเฉ‡เจฒ เจ‡เจจเจตเฉ‹เจ•-เจ•เจฎเจพเจ‚เจก เจคเฉ‹เจ‚ 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

เจนเฉเจฃ, เจ‡เฉฑเจ• เจธเจพเจˆเจก เจจเฉ‹เจŸ เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡, เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ Write-Output เจœเจพเจ‚ PowerShell เจซเฉฐเจ•เจธเจผเจจ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจ‡เฉฑเจ• เจเจ•เจธเจชเฉเจฐเฉˆเจธเจผเจจ เจฒเจฟเจ–เจฆเฉ‡ เจนเฉ‹, เจฌเจฟเจจเจพเจ‚ เจ•เจฟเจธเฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจจเฉ‚เฉฐ เจฆเจฟเฉฑเจคเฉ‡ (เจœเฉ‹ เจ•เจฟ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจšเฉˆเจจเจฒ เจจเฉ‚เฉฐ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ), เจคเจพเจ‚ เจธเจฅเจพเจจเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจšเฉฑเจฒเจฆเฉ‡ เจนเฉ‹เจ เจตเฉ€ เจ•เฉเจ เจตเฉ€ เจธเจ•เฉเจฐเฉ€เจจ 'เจคเฉ‡ เจชเฉเจฐเจฟเฉฐเจŸ เจจเจนเฉ€เจ‚ เจนเฉ‹เจตเฉ‡เจ—เจพ! เจ‡เจน PowerShell เจฆเฉ‡ เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจฆเจพ เจจเจคเฉ€เจœเจพ เจนเฉˆโ€”เจนเจฐเฉ‡เจ• เจซเฉฐเจ•เจธเจผเจจ เจฆเฉ€ เจ†เจชเจฃเฉ€ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจ‡เฉฑเจ• เจเจฐเฉ‡ เจฌเจฃเจพเจˆ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เจธ เจตเจฟเฉฑเจš เจ–เจคเจฎ เจนเฉ‹เจฃ เจตเจพเจฒเฉ€ เจนเจฐ เจšเฉ€เจœเจผ เจจเฉ‚เฉฐ เจซเฉฐเจ•เจธเจผเจจ เจฆเฉ‡ เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจฆเจพ เจจเจคเฉ€เจœเจพ เจฎเฉฐเจจเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจฐเจฟเจŸเจฐเจจ เจ†เจชเจฐเฉ‡เจŸเจฐ เจ†เจ–เจฐเฉ€ เจเจฒเฉ€เจฎเฉˆเจ‚เจŸ เจตเจพเจ‚เจ— เจ‡เจธ เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจตเจฟเฉฑเจš เจฐเจฟเจŸเจฐเจจ เจตเฉˆเจฒเจฏเฉ‚ เจœเฉ‹เฉœเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ•เจพเจฒเจฟเฉฐเจ— เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจ•เฉฐเจŸเจฐเฉ‹เจฒ เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจฆเจฐเจธเจพเจ‰เจฃ เจฒเจˆ, เจ†เจ“ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ€ เจธเจ•เฉเจฐเจฟเจชเจŸ เจจเฉ‚เฉฐ เจธเจฅเจพเจจเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจšเจฒเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚:

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

เจฎเฉเฉฑเจ– เจซเฉฐเจ•เจธเจผเจจ (เจธเจ•เฉเจฐเจฟเจชเจŸ เจฆเจพ เจฎเฉเฉฑเจ– เจญเจพเจ—) เจฆเฉ€ เจ†เจชเจฃเฉ€ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจตเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจœเฉ‡เจ•เจฐ เจ…เจธเฉ€เจ‚ CMD เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเฉ€ เจธเจ•เฉเจฐเจฟเจชเจŸ เจšเจฒเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚, เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจฐเฉ€เจกเจพเจ‡เจฐเฉˆเจ•เจŸ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚,

PowerShell .TestOutput1.ps1 1 > TestOutput1.txt

เจซเจฟเจฐ เจ…เจธเฉ€เจ‚ เจธเจ•เจฐเฉ€เจจ เจคเฉ‡ เจตเฉ‡เจ–เจพเจ‚เจ—เฉ‡

ERRORLEVEL=1

เจ…เจคเฉ‡ เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš

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

เจœเฉ‡เจ•เจฐ เจ…เจธเฉ€เจ‚ PowerShell เจคเฉ‹เจ‚ เจ‡เฉฑเจ• เจธเจฎเจพเจจ เจ•เจพเจฒ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚

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

เจซเจฟเจฐ เจธเจ•เจฐเฉ€เจจ 'เจคเฉ‡ เจนเฉ‹เจตเฉ‡เจ—เจพ

Out to host.
ExitCode: 1

เจ…เจคเฉ‡ เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš

Out to output.
1

เจ…เจœเจฟเจนเจพ เจ‡เจธ เจฒเจˆ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจ•เจฟเจ‰เจ‚เจ•เจฟ CMD เจชเจพเจตเจฐเจธเจผเฉˆเจฒ เจฒเจพเจ‚เจš เจ•เจฐเจฆเจพ เจนเฉˆ, เจœเฉ‹, เจœเฉ‡ เจนเฉ‹เจฐ เจจเจฟเจฐเจงเจพเจฐเจค เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจคเจพเจ‚ เจฆเฉ‹ เจธเจŸเฉเจฐเฉ€เจฎเจพเจ‚ (เจนเฉ‹เจธเจŸ เจ…เจคเฉ‡ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ) เจจเฉ‚เฉฐ เจฎเจฟเจฒเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ CMD เจจเฉ‚เฉฐ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ, เจœเฉ‹ เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจชเฉเจฐเจพเจชเจค เจนเฉ‹เจˆ เจนเจฐ เจšเฉ€เจœเจผ เจญเฉ‡เจœเจฆเจพ เจนเฉˆ, เจœเจฆเฉ‹เจ‚ เจ•เจฟ เจชเจพเจตเจฐเจธเจผเฉˆเจฒ เจคเฉ‹เจ‚ เจฒเจพเจ‚เจš เจ•เจฐเจจ เจฆเฉ‡ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš, เจ‡เจน เจฆเฉ‹เจตเฉ‡เจ‚ เจธเจŸเฉเจฐเฉ€เจฎเจพเจ‚ เจตเฉฑเจ–เจฐเฉ€เจ†เจ‚ เจนเฉเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจ, เจ…เจคเฉ‡ เจฐเฉ€เจกเจพเจ‡เจฐเฉˆเจ•เจธเจผเจจ เจšเจฟเฉฐเจจเฉเจน เจธเจฟเจฐเจซเจผ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจจเฉ‚เฉฐ เจชเฉเจฐเจญเจพเจตเจฟเจค เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจฎเฉเฉฑเจ– เจตเจฟเจธเจผเฉ‡ เจคเฉ‡ เจตเจพเจชเจธ เจ†เจ‰เจ‚เจฆเฉ‡ เจนเฉ‹เจ, เจฏเจพเจฆ เจฐเฉฑเจ–เฉ‹ เจ•เจฟ PowerShell เจฆเฉ‡ เจ…เฉฐเจฆเจฐ .NET เจ†เจฌเจœเฉˆเจ•เจŸ เจฎเจพเจกเจฒ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจ‡เฉฑเจ• เจธเจฟเฉฐเจ—เจฒ เจ•เฉฐเจชเจฟเจŠเจŸเจฐ (เจ‡เฉฑเจ• เจธเจฟเฉฐเจ—เจฒ OS) เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจฎเฉŒเจœเฉ‚เจฆ เจนเฉˆเฅค เจœเจฆเฉ‹เจ‚ 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

เจ†เจ“ เจ‡เจน เจชเจคเจพ เจฒเจ—เจพเจ‰เจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ€เจ เจ•เจฟ เจ•เฉ€ เจนเฉ‹เจ‡เจ†เฅค เจ…เจธเฉ€เจ‚ PowerShell เจจเฉ‚เฉฐ เจธเจฅเจพเจจเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจ•เจพเจฒ เจ•เฉ€เจคเฉ€, เจœเจฟเจธเจจเฉ‡ เจฌเจฆเจฒเฉ‡ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฐเจฟเจฎเฉ‹เจŸ เจ•เฉฐเจชเจฟเจŠเจŸเจฐ 'เจคเฉ‡ PowerShell เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เฉ€เจคเจพ เจ…เจคเฉ‡ เจ‰เฉฑเจฅเฉ‡ เจธเจพเจกเฉ€ เจธเจ•เฉเจฐเจฟเจชเจŸ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‡เจ†เฅค เจฐเจฟเจฎเฉ‹เจŸ เจฎเจธเจผเฉ€เจจ เจคเฉ‹เจ‚ เจฆเฉ‹ เจธเจŸเฉเจฐเฉ€เจฎเจพเจ‚ (เจนเฉ‹เจธเจŸ เจ…เจคเฉ‡ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ) เจจเฉ‚เฉฐ เจธเฉ€เจฐเฉ€เจ…เจฒเจพเจˆเจœเจผ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจ…เจคเฉ‡ เจตเจพเจชเจธ เจชเจพเจธ เจ•เฉ€เจคเจพ เจ—เจฟเจ†เฅค เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจธเจŸเฉเจฐเฉ€เจฎ, เจœเจฟเจธ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเจฟเฉฐเจ—เจฒ เจธเฉฐเจ–เจฟเจ†เจคเจฎเจ• เจฎเฉเฉฑเจฒ เจธเฉ€, เจจเฉ‚เฉฐ เจ‡เฉฑเจ• Int32 เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฟเจ† เจ—เจฟเจ† เจ…เจคเฉ‡ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจชเจพเจธเฉ‡ เจจเฉ‚เฉฐ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจชเจพเจธ เจ•เฉ€เจคเจพ เจ—เจฟเจ†, เจœเจฟเจธเจจเฉ‡ เจซเจฟเจฐ เจ‡เจธเจจเฉ‚เฉฐ เจ•เจพเจฒเจฟเฉฐเจ— PowerShell เจฆเฉ‡ เจเจ—เจœเจผเจฟเจŸ เจ•เฉ‹เจก เจตเจœเฉ‹เจ‚ เจตเจฐเจคเจฟเจ†เฅค

เจ…เจคเฉ‡ เจ…เฉฐเจคเจฟเจฎ เจœเจพเจ‚เจš เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡, เจ†เจ“ เจฌเจฃเจพเจˆเจ เจธเจฐเจตเจฐ "เจ“เจชเจฐเฉ‡เจŸเจฟเฉฐเจ— เจธเจฟเจธเจŸเจฎ (cmdexec)" เจ•เจฟเจธเจฎ เจฆเจพ เจ‡เฉฑเจ• เจธเจฟเฉฐเจ—เจฒ-เจธเจŸเฉˆเจช SQL เจŸเจพเจธเจ• เจœเจฟเจธ เจตเจฟเฉฑเจš เจนเฉ‡เจ  เจฒเจฟเจ–เฉ‡ เจŸเฉˆเจ•เจธเจŸ เจนเจจ:

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.  ะจะฐะณ ะทะฐะฒะตั€ัˆะธะปัั ั ะพัˆะธะฑะบะพะน.

เจธเจฟเฉฑเจŸเจพ:

  • Write-Output เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจ…เจคเฉ‡ เจ…เจธเจพเจˆเจจเจฎเฉˆเจ‚เจŸ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจธเจฎเฉ€เจ•เจฐเจจ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจšเฉ‹เฅค เจฏเจพเจฆ เจฐเฉฑเจ–เฉ‹ เจ•เจฟ เจ‡เจธ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจธเจ•เฉเจฐเจฟเจชเจŸ เจตเจฟเฉฑเจš เจ•เจฟเจคเฉ‡ เจนเฉ‹เจฐ เจฒเจฟเจœเจพเจฃ เจจเจพเจฒ เจ…เจฃเจ•เจฟเจ†เจธเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจจเจฟเจ•เจฒ เจธเจ•เจฆเฉ‡ เจนเจจเฅค
  • เจธเจ•เฉเจฐเจฟเจชเจŸเจพเจ‚ เจตเจฟเฉฑเจš เจœเฉ‹ เจฎเฉˆเจจเฉ‚เจ…เจฒ เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจฒเจˆ เจจเจนเฉ€เจ‚ เจฌเจฒเจ•เจฟ เจคเฉเจนเจพเจกเฉ‡ เจ†เจŸเฉ‹เจฎเฉ‡เจธเจผเจจ เจตเจฟเจงเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจตเจฐเจคเฉ‹เจ‚ เจฒเจˆ เจนเจจ, เจ–เจพเจธ เจ•เจฐเจ•เฉ‡ WINRM เจฐเจพเจนเฉ€เจ‚ เจฐเจฟเจฎเฉ‹เจŸ เจ•เจพเจฒเจพเจ‚ เจฒเจˆ, Try/Catch เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฎเฉˆเจจเฉ‚เจ…เจฒ เจเจฐเจฐ เจนเฉˆเจ‚เจกเจฒเจฟเฉฐเจ— เจฒเจพเจ—เฉ‚ เจ•เจฐเฉ‹, เจ…เจคเฉ‡ เจ‡เจน เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ“ เจ•เจฟ เจธเจ•เฉเจฐเจฟเจชเจŸ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจธเจŸเฉเจฐเฉ€เจฎ เจจเฉ‚เฉฐ เจฌเจฟเจฒเจ•เฉเจฒ เจ‡เฉฑเจ• เจฎเฉเฉฑเจขเจฒเจพ เจฎเฉเฉฑเจฒ เจญเฉ‡เจœเจฆเฉ€ เจนเฉˆเฅค เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ•เจฒเจพเจธเจฟเจ• เจเจฐเจฐเจฒเฉˆเจตเจฒ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจ‡เจน เจฎเฉเฉฑเจฒ เจธเฉฐเจ–เจฟเจ†เจคเจฎเจ• เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค

เจธเจฐเฉ‹เจค: www.habr.com

DDoS เจธเฉเจฐเฉฑเจ–เจฟเจ†, VPS VDS เจธเจฐเจตเจฐเจพเจ‚ เจตเจพเจฒเฉ€เจ†เจ‚ เจธเจพเจˆเจŸเจพเจ‚ เจฒเจˆ เจญเจฐเฉ‹เจธเฉ‡เจฏเฉ‹เจ— เจนเฉ‹เจธเจŸเจฟเฉฐเจ— เจ–เจฐเฉ€เจฆเฉ‹ ๐Ÿ”ฅ DDoS เจธเฉเจฐเฉฑเจ–เจฟเจ†, VPS VDS เจธเจฐเจตเจฐเจพเจ‚ เจจเจพเจฒ เจญเจฐเฉ‹เจธเฉ‡เจฏเฉ‹เจ— เจตเฉˆเฉฑเจฌเจธเจพเจˆเจŸ เจนเฉ‹เจธเจŸเจฟเฉฐเจ— เจ–เจฐเฉ€เจฆเฉ‹ | ProHoster