ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅Π·Π΅ΡΠ²Π½ΡΠΌΠΈ ΠΊΠΎΠΏΠΈΡΠΌΠΈ Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² 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, Π΄Π»Ρ Π½Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ², ΠΈ Π²ΡΠ΅, ΡΡΠΎ Π² Π½Π΅Π³ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ, ΡΡΠΈΡΠ°Π΅ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ 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
ΠΠ»Π°Π²Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ (ΡΠ΅Π»ΠΎ ΡΠΊΡΠΈΠΏΡΠ°) ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ Output, ΠΈ Π΅ΡΠ»ΠΈ ΠΌΡ Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΊΡΠΈΠΏΡ ΠΈΠ· 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, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠΊΠ°Π·Π°Π½ΠΈΠΉ ΡΠΌΠ΅ΡΠΈΠ²Π°Π΅Ρ Π΄Π²Π° ΠΏΠΎΡΠΎΠΊΠ° (Host ΠΈ Output) ΠΈ ΠΎΡΠ΄Π°Π΅Ρ ΠΈΡ CMD, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π² ΡΠ°ΠΉΠ» Π²ΡΠ΅, ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ», Π° Π² ΡΠ»ΡΡΠ°Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ· powershell ΡΡΠΈ Π΄Π²Π° ΠΏΠΎΡΠΎΠΊΠ° ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ, ΠΈ ΡΠΈΠΌΠ²ΠΎΠ» ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π»ΠΈΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Output.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡ ΠΊ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ΅ΠΌΠ΅, Π²ΡΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ .NET Π²Π½ΡΡΡΠΈ powershell ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° (ΠΎΠ΄Π½ΠΎΠΉ ΠΠ‘), ΠΏΡΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΠ΅Π· 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), ΡΡΠΎ Π΄Π°Π΅Ρ Π½Π°ΠΌ Π½Π°Π΄Π΅ΠΆΠ΄Ρ Π½Π° ΡΡΠΏΠ΅Ρ . ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΠΎΡΡΠ°Π²ΠΈΡΡ Π² ΠΏΠΎΡΠΎΠΊΠ΅ 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 Π½Π° ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ» ΡΠ°ΠΌ Π½Π°Ρ ΡΠΊΡΠΈΠΏΡ. ΠΠ²Π° ΠΏΠΎΡΠΎΠΊΠ° (Host ΠΈ Output) Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ Π±ΡΠ»ΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΡΠΎΠΊ Output ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ Π² Π½Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΡΡΠΎΠ²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±ΡΠ» ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ ΠΊ ΡΠΈΠΏΡ 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, ΠΈ Π΄ΠΎΠ±ΠΈΠ²Π°ΠΉΡΠ΅ΡΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈ Π»ΡΠ±ΠΎΠΌ ΡΠ°Π·Π²ΠΈΡΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ ΡΡΠΎΡ ΡΠΊΡΠΈΠΏΡ ΠΎΡΠΏΡΠ°Π²ΠΈΠ» Π² ΠΏΠΎΡΠΎΠΊ Output ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Errorlevel β ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠΈΡΠ»ΠΎΠ²ΡΠΌ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com