ืฆื•ืจื™ืงืงื•ืžืขืŸ ืึท ื•ื•ืขืจื˜ ืคื•ืŸ Powershell ื™ื ื•ื•ืึธื•ืง-ืงืึทืžืึทื ื“ ืฆื• 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

ื’ืจื•ื™ืก, ืขืจืจืœืขื•ื•ืขืœ ืื™ื– ืคืึทืจืฉื•ื•ื•ื ื“ืŸ ืขืจื’ืขืฅ, ืึธื‘ืขืจ ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื‘ืึทืงื•ืžืขืŸ ื“ื™ ื•ื•ืขืจื˜ ืคื•ืŸ ื“ื™ ืฉืจื™ืคื˜! ืœืึธืžื™ืจ ืคึผืจื•ื‘ื™ืจืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืคึผืœืึทืŸ:

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

ื“ืึธืก ืื™ื– ื ืึธืš ืžืขืจ ื˜ืฉื™ืงืึทื•ื•ืข. ื“ืขืจ ืึธื ื–ืึธื’ ืื™ืŸ ืจืขื–ื•ืœื˜ืึทื˜ ืื™ื– ืคืึทืจืฉื•ื•ื•ื ื“ืŸ ืขืจื’ืขืฅ:

Out to host.
ExitCode: 2
ERRORLEVEL=0

ืื™ืฆื˜, ื•ื•ื™ ืึท ืœื™ืจื™ืงืึทืœ ื“ื™ื’ืจืขืฉืึทืŸ, ืื™ืš ื•ื•ืขื˜ ื˜ืึธืŸ ืึทื– ืื•ื™ื‘ ื™ืŸ ืึท Powershell ืคื•ื ืงืฆื™ืข ืื™ืจ ืฉืจื™ื™ึทื‘ืŸ Write-Output ืึธื“ืขืจ ื ืึธืจ ืึทืŸ ืื•ื™ืกื“ืจื•ืง ืึธืŸ ืึทืกื™ื™ื ื™ื ื’ ืขืก ืฆื• ืงื™ื™ืŸ ื•ื•ืขืจื™ืึทื‘ืึทืœื– (ืื•ืŸ ื“ืึธืก ื™ืžืคึผืœื™ืกืึทื˜ ื™ืžืคึผืœื™ื™ื– ืจืขื–ื•ืœื˜ืึทื˜ ืฆื• ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ ืงืึทื ืึทืœ), ืืคื™ืœื• ื•ื•ืขืŸ ืคืœื™ืกื ื“ื™ืง ืœืึธื•ืงืึทืœื™, ื’ืึธืจื ื™ืฉื˜ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื–ืŸ ืื•ื™ืฃ ื“ืขื ืขืงืจืึทืŸ! ื“ืึธืก ืื™ื– ืึท ืงืึทื ืกืึทืงื•ื•ืึทื ืก ืคื•ืŸ ื“ื™ 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

ืื•ื™ื‘ ืžื™ืจ ืžืึทื›ืŸ ืึท ืขื ืœืขืš ืจื•ืคืŸ ืคื•ืŸ ืคึผืึธื•ื•ืขืจืฉืขืœืœ

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

ื“ืขืžืึธืœื˜ ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืื•ื™ืฃ ื“ืขื ืขืงืจืึทืŸ

Out to host.
ExitCode: 1

ืื•ืŸ ืื™ืŸ ื“ืขืจ ื˜ืขืงืข

Out to output.
1

ื“ืึธืก ื›ืึทืคึผืึทื ื– ื•ื•ื™ื™ึทืœ ื“ื™ CMD ืœืึธื ื˜ืฉื™ื– Powershell, ื•ื•ืึธืก, ืื™ืŸ ื“ืขืจ ืึทื•ื•ืขืง ืคื•ืŸ ืื ื“ืขืจืข ืื™ื ืกื˜ืจื•ืงืฆื™ืขืก, ืžื™ืงืกืขืก ืฆื•ื•ื™ื™ ืคึฟืขื“ืขื (ื”ืึธืกื˜ ืื•ืŸ ืจืขื–ื•ืœื˜ืึทื˜) ืื•ืŸ ื’ื™ื˜ ื–ื™ื™ ืฆื• ื“ื™ CMD, ื•ื•ืึธืก ืกืขื ื“ื– ืึทืœืฅ ืขืก ื‘ืืงื•ืžืขืŸ ืฆื• ืึท ื˜ืขืงืข, ืื•ืŸ ืื™ืŸ ื“ืขื ืคืึทืœ ืคื•ืŸ ืœืึธื ื˜ืฉื™ื ื’ ืคึฟื•ืŸ Powershell, ื“ื™ ืฆื•ื•ื™ื™ ืคึฟืขื“ืขื ืขืงืกื™ืกื˜ื™ืจืŸ ืกืขืคึผืขืจืึทื˜ืœื™, ืื•ืŸ ื“ื™ ืกื™ืžื‘ืึธืœ ืจื™ื“ืขืจืขืงืฅ ื ืึธืจ ื•ื•ื™ืจืงืŸ ืจืขื–ื•ืœื˜ืึทื˜.

ืฆื•ืจื™ืง ืฆื• ื“ืขืจ ื”ื•ื™ืคึผื˜ ื˜ืขืžืข, ืœืึธื–ืŸ ืื•ื ื“ื– ื’ืขื“ืขื ืงืขืŸ ืึทื– ื“ื™ .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

ื’ืจื•ื™ืก ืจืขื–ื•ืœื˜ืึทื˜! ื“ืึธืก ืžื™ื™ื ื˜ ืึทื– ื•ื•ืขืŸ ืื™ืจ ืจื•ืคืŸ Invoke-Command, ื“ื™ ืึธืคึผื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ืคึผื™ื™ืคึผืœื™ื™ื ื– ืื™ืŸ ืฆื•ื•ื™ื™ ืคึฟืขื“ืขื (ื”ืึธืกื˜ ืื•ืŸ ืจืขื–ื•ืœื˜ืึทื˜) ืื™ื– ืžื™ื™ื ื˜ื™ื™ื ื“, ื•ื•ืึธืก ื’ื™ื˜ ืื•ื ื“ื– ื”ืึธืคืขื ื•ื ื’ ืคึฟืึทืจ ื”ืฆืœื—ื”. ืœืึธืžื™ืจ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืœืึธื–ืŸ ื‘ืœื•ื™ื– ืื™ื™ืŸ ื•ื•ืขืจื˜ ืื™ืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ ื˜ื™ื™ึทืš, ืคึฟืึทืจ ื•ื•ืึธืก ืžื™ืจ ื•ื•ืขืœืŸ ื˜ื•ื™ืฉืŸ ื“ื™ ืขืจืฉื˜ืขืจ ืฉืจื™ืคื˜ ื•ื•ืึธืก ืžื™ืจ ืœื•ื™ืคืŸ ืจื™ืžืึธื•ื˜ืœื™:

$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 ืื•ืŸ ื•ื•ื™ ืึทื–ืึท ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ืฆื• ื“ื™ ืจื™ืกื™ื•ื•ื™ื ื’ ื–ื™ื™ึทื˜, ืื•ืŸ ื“ื™ ืจื™ืกื™ื•ื•ื™ื ื’ ื–ื™ื™ึทื˜ ื’ืขื•ื•ื™ื™ื ื˜ ืขืก. ื•ื•ื™ ื“ืขืจ ืึทืจื•ื™ืกื’ืึทื ื’ ืงืึธื“ ืคื•ืŸ ื“ื™ ืงืึทืœืœืขืจ ืคึผืึธื•ื•ืขืจืฉืขืœ.

ืื•ืŸ ื•ื•ื™ ืึท ืœืขืฆื˜ ื˜ืฉืขืง, ืœืึธื–ืŸ ืื•ื ื“ื– ืžืึทื›ืŸ ืึท ืื™ื™ืŸ-ืฉืจื™ื˜ ืึทืจื‘ืขื˜ ืื•ื™ืฃ ื“ื™ ืกืงืœ ืกืขืจื•ื•ืขืจ ืžื™ื˜ ื“ืขื ื˜ื™ืคึผ "ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขื (ืงืžื“ืขืงืกืขืง)" ืžื™ื˜ ื“ื™ ืคืืœื’ืขื ื“ืข ื˜ืขืงืกื˜:

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

HOORAY! ื“ื™ ืึทืจื‘ืขื˜ ืื™ื– ื’ืขืขื ื“ื™ืงื˜ ืžื™ื˜ ืึท ื˜ืขื•ืช, ื˜ืขืงืกื˜ ืื™ืŸ ื“ื™ ืงืœืึธืฅ:

ะ’ั‹ะฟะพะปะฝัะตั‚ัั ะพั‚ ะธะผะตะฝะธ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั: DOMAINagentuser. Out to host. ExitCode: 6.  ะšะพะด ะทะฐะฒะตั€ัˆะตะฝะธั ะฟั€ะพั†ะตััะฐ 6.  ะจะฐะณ ะทะฐะฒะตั€ัˆะธะปัั ั ะพัˆะธะฑะบะพะน.

ืงืึทื ืงืœื•ื–ืฉืึทื ื–:

  • ื•ื™ืกืžื™ื™ื“ืŸ ื ื™ืฆืŸ Write-Output ืื•ืŸ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ืื•ื™ืกื“ืจื•ืงืŸ ืึธืŸ ืึทืกื™ื™ื ืžืึทื ื˜. ื–ื™ื™ื˜ ืึทื•ื•ืขืจ ืึทื– ืžืึธื•ื•ื™ื ื’ ื“ืขื ืงืึธื“ ืื ื“ืขืจืฉ ืื™ืŸ ื“ื™ ืฉืจื™ืคื˜ ืงืขืŸ ืคึผืจืึธื“ื•ืฆื™ืจืŸ ืื•ืžื’ืขืจื™ื›ื˜ ืจืขื–ื•ืœื˜ืึทื˜ืŸ.
  • ืื™ืŸ ืกืงืจื™ืคึผืก ื‘ื“ืขื” ื ื™ืฉื˜ ืคึฟืึทืจ ืžืึทื ื•ืึทืœ ืงืึทื˜ืขืจ, ืึธื‘ืขืจ ืคึฟืึทืจ ื ื•ืฆืŸ ืื™ืŸ ื“ื™ื™ืŸ ืึธื˜ืึทืžื™ื™ืฉืึทืŸ ืžืขืงืึทื ื™ื–ืึทืžื–, ืกืคึผืขืฆื™ืขืœ ืคึฟืึทืจ ื•ื•ื™ื™ึทื˜ ืงืึทืœืœืก ื“ื•ืจืš WINRM, ื˜ืึธืŸ ืžืึทื ื•ืึทืœ ื˜ืขื•ืช ื”ืึทื ื“ืœื™ื ื’ ื“ื•ืจืš ืคึผืจื•ึผื•ื•ื˜ / ื›ืึทืคึผืŸ, ืื•ืŸ ืขื ืฉื•ืจ ืึทื– ืื™ืŸ ืงื™ื™ืŸ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ื’ืขืฉืขืขื ื™ืฉืŸ, ื“ืขื ืฉืจื™ืคื˜ ืกืขื ื“ื– ืคึผื•ื ืงื˜ ืื™ื™ืŸ ืคึผืจื™ืžื™ื˜ื™ื•ื• ื˜ื™ืคึผ ื•ื•ืขืจื˜ . ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืงืœืึทืกื™ืฉ Errorlevel, ื“ื™ ื•ื•ืขืจื˜ ืžื•ื–ืŸ ื–ื™ื™ืŸ ื ื•ืžืขืจื™ืง.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’