แแ แแแแแ 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]
แแก แแแแแ แฃแคแ แ แกแแแแขแแ แแกแแ. แแแแแแแแ Output-แจแ แกแแแฆแแช แแแฅแ แ:
Out to host.
ExitCode: 2
ERRORLEVEL=0
แแฎแแ, แ แแแแ แช แแแ แแแฃแแ แแแแ แแกแแแก แกแแฎแแ, แแ แแฆแแแแจแแแ, แ แแ แแฃ Powershell แคแฃแแฅแชแแแก แจแแแแแ แฉแแฌแแ แ Write-Output แแ แฃแแ แแแแ แแแแแแแแฅแแแแก แ แแแแ แชแแแแแแกแแแแก แแแแแญแแแแก แแแ แแจแ (แแ แแก แแแฃแแแกแฎแแแแ แแแแแแแแแแ แแแแแแแแแแ แแ แฎแแ), แแแจแแแแช แแ, แ แแชแ แแแแแแแแ แแแแ แแฃแจแแแแก, แแ แแคแแ แ แแ แแแแแฉแแแแแ แแแ แแแแ! แแก แแ แแก powershell แแแแกแแแแแแก แแ แฅแแขแแฅแขแฃแ แแก แจแแแแแ - แแแแแแฃแ แคแฃแแฅแชแแแก แแฅแแก แแแแแกแ แแแแแแแแแแ แแแแกแแแแแ, แแแกแแแแก แแฅแแแแแ แแแกแแแ แแ แงแแแแแคแแ แ, แ แแช แแแกแจแ แจแแแแก, แแแแแแแ แคแฃแแฅแชแแแก แจแแกแ แฃแแแแแก แจแแแแแแ, Return แแแแ แแขแแ แ แแแแแแขแแแก แแแแ แฃแแแแแก แแแแจแแแแแแแแก แแแแแแก. แแแแกแแแแแ, แ แแแแ แช แแแแ แแแแแแแขแ แแ แแแแแกแชแแแก แแแแขแ แแแก แแแแแซแแฎแแแแก แคแฃแแฅแชแแแก. แกแแแแฃแกแขแ แแชแแแ, แแแแแ แแแแฃแจแแแ แจแแแแแแ แกแแ แแแขแ แแแแแแแแ แแแแ:
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 แแแแแฃแจแแแแก powershell-แก, แ แแแแแแช แกแฎแแ แแแกแขแ แฃแฅแชแแแแแก แแ แแ แกแแแแแแก แจแแแแฎแแแแแจแ แแแ แแแแแแแก แแ แซแแคแก (แฐแแกแขแก แแ แแแแแแแแแแก) แแ แแซแแแแก แแแ CMD-แก, แ แแแแแแช แแแแแแแแก แงแแแแแคแแ แก, แ แแช แแแแฆแ แคแแแแจแ, แแ Powershell-แแแแ แแแจแแแแแก แจแแแแฎแแแแแจแ, แแก แแ แ แซแแคแ แชแแ-แชแแแแ แแ แกแแแแแก แแ แกแแแแแแแแแแก แแแแแแแกแแแแ แแแแแแ แแแแแแแแก แแฎแแแแก แแฎแแแแ แแแแแแแแแแแ.
แแแแแแ แแแแแก แ แแ แแแแฃแแ แฃแแแแ, แแแแแฎแกแแแแ, แ แแ 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
แจแแกแแแแจแแแแ แจแแแแแ! แแก แแแจแแแแก, แ แแ Invoke-Command-แแก แแแแแซแแฎแแแแกแแก แจแแแแ แฉแฃแแแแฃแแแ แแแแกแแแแแแแแก แแแงแแคแ แแ แซแแคแแ (Host แแ Output), แ แแช แฌแแ แแแขแแแแก แแแแแก แแแแซแแแแก. แจแแแแชแแแแ แแแแแแแแแแ แแแแแแจแ แแแแขแแแแ แแฎแแแแ แแ แแ แแแแจแแแแแแแ, แ แแกแแแแกแแช แฉแแแ แจแแแชแแแแ แแแ แแแแแแ แกแแ แแแขแก, แ แแแแแกแแช แแแกแขแแแชแแฃแ แแ แแแขแแ แแแ:
$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-แแก แแแกแแกแแแแแ แแแแ.
แแ แ แแแแ แช แกแแแแแแ แจแแแแฌแแแแ, แแแแแ แจแแแฅแแแแ แแ แแกแแคแแฎแฃแ แแแแ แกแแแฃแจแแ SQL แกแแ แแแ แแ แขแแแแก "แแแแ แแชแแฃแแ แกแแกแขแแแ (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. ะจะฐะณ ะทะฐะฒะตััะธะปัั ั ะพัะธะฑะบะพะน.
แแแกแแแแแแ:
- แแแแ แแแแ Write-Output-แแก แแแแแงแแแแแแก แแ แแแแแแแแฅแแแแแแแก แแแแแแแแแก แแแแแญแแแแก แแแ แแจแ. แแแแแแแแแกแฌแแแแ, แ แแ แแ แแแแแก แแแแแขแแแ แกแแ แแแขแแก แกแฎแแแแแ แจแแแซแแแแ แแแแแแฌแแแแก แแแฃแแแแแแแ แจแแแแแแแ.
- แกแแ แแแขแแแจแ, แ แแแแแแแช แแแแแฃแแแแแแแ แแ แ แฎแแแแ แแแจแแแแแกแแแแก, แแ แแแแ แแฅแแแแก แแแขแแแแขแแแแชแแแก แแแฅแแแแแแแแจแ แแแแแกแแงแแแแแแแ, แแแแกแแแฃแแ แแแแ WINRM-แแก แแแกแขแแแชแแฃแ แ แแแ แแแแกแแแแก, แแแแแแแแ แจแแชแแแแแแแก แฎแแแแ แแแแฃแจแแแแแ Try/Catch-แแก แกแแจแฃแแแแแแ แแ แแแ แฌแแฃแแแแ, แ แแ แแแแแแแแแแก แแแแแแแแ แแแแก แแแแแกแแแแ แแ แแก แแก แกแแ แแแขแ แแแแแแแแก แแฃแกแขแแ แแ แ แแ แแแแขแแฃแ แขแแแแก แแแแจแแแแแแแแก. . แแฃ แแกแฃแ แ แแแแฆแแ แแแแกแแแฃแ แ แจแแชแแแแแก แแแแ, แแก แแแแจแแแแแแแ แฃแแแ แแงแแก แ แแชแฎแแแแ.
แฌแงแแ แ: www.habr.com