αα ααααααααΎααα·ααΈααΆαααααααααΆαααααα½ααααααααα»ααααααΆαααααααααααααΆαααααα»ααα»ααα ααΎαααΆαααΈααα 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 α¬ααααΆααααααΆαααααααα½αααααα·ααααααααΆαα α’αααααΆαα½α (α αΎααααααααααααααααααααα ααΆααα Output) αααααΆααααααΌααααΈαααα αααααααΎαααΆααααα»αααΌαααααΆααααααα ααααΆαα’αααΈααΉαααααΌαααΆααααα αΆααα ααΎα’αααααααα! αααααΊααΆαααα·ααΆαααααααΆααααααααααααα powershell - αα»αααΆαααΈαα½ααααΆα Output pipeline ααααααΆ α’αΆααααααΌαααΆααααααΎαα‘αΎααααααΆααααΆ α αΎαα’αααΈααααααααΆααααα αΌααα αααα»αααΆααααΌαααΆαα αΆαααα»αααΆααΆααααααααααΆαααααα·ααααα·αα»αααΆα ααααα·ααααα·αααααα‘ααααααααααααααααα‘αααα ααΌα ααααΆ ααααααααααΆααΆαα»α α»αααααα α αΎααααααααΆαααααααααααα αα»αααΆαα α ααΌαααααα ααΎααααΈαααα αΆα ααΌαααααΎαααΆαααααααΈαααΆαααααααααα»αααΌαααααΆαα
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
αα»αααΆαα αααα (αα½ααααααΈα) ααααΆα Output pipeline ααααααΆααα α αΎαααααα·αααΎααΎαααααΎαααΆα script ααααΌαααΈ CMD ααααΌααα·α output αα ααΆ fileα
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 ααααααα»αααααΈαααααααΆαααΆαααααΆααααααααα ααΆααααααααα‘αΆαααΈα (Host αα·α Output) α αΎααααααα±αααα½ααααα CMD αααααααΎα’αααΈααααααααΆααααααΆααΆαααα½ααα α―αααΆααα½α α αΎααααα»αααααΈααααΎαααΆαααΈ powershell αααααααααΆαααΆααααΈααααααΆαααΆα ααααα‘ααααΈααααΆ α αΎααα·αα·ααααααααΆααααΌααα·ααααααΆαααααααααααααααα»αααααα
αααααααα αααααΆαααααααΆαα α’αα»ααααΆαα±ααααΎαα αα αΆαααΆ ααααΌααααα» .NET αα ααΆααααα»α powershell ααΆααααΆααααααααα αααα»ααα»αααααΌααααα½α (ααααααααααααα·ααααα·ααΆααα½α) αα ααααααααααΎαααΆαααΌαααΈα ααααΆαααΆαααα WSMAN ααΆααααααααααα»ααΎαα‘αΎαααΆαααα XML serialization αααααΆαααααΌαα αααΆααα’αΆααααααααααααααΆα αααΎαα α ααααααΆαααααΆαααααΆαααααααΎαα αααααααααΆααα·αααααααααααΎααααααααΎαααΆαααΌαααΆααααααα
$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 ααΆααααα ααααααααα ααΆαααααααα‘αΆαααΈα (αααΆαααΈααα·ααα·ααααα) ααααΌαααΆααααααΆααααααααα±ααααΎαααΌαααααΈαααααΉααααααΆααααΆαααααααα αααααααΆααΆααα»αααααααααα½ααα αααα»α Output stream αααααΎαααΉαααααΆααααααΌα script ααααΌααααα»ααααααΎαααααΎαααΆαααΈα ααααΆαα
$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