I le fatuina o laʻu lava metotia mo le puleaina o faʻamaumauga i luga o le tele o sapalai MS-SQL, sa ou faʻaaluina le tele o le taimi e suʻesuʻe ai le faiga mo le pasiina o tulaga taua i Powershell i taimi o telefoni mamao, o lea ou te tusia ai se faamanatu ia te aʻu lava pe a aoga. i se isi tagata.
O lea la, tatou amata i se tusitusiga faigofie ma taʻavale i le lotoifale:
$exitcode = $args[0]
Write-Host 'Out to host.'
Write-Output 'Out to output.'
Write-Host ('ExitCode: ' + $exitcode)
Write-Output $exitcode
$host.SetShouldExit($exitcode)
Ina ia faʻatautaia tusitusiga, o le a ou faʻaogaina le faila CMD nei, ou te le faʻaaofia i taimi uma:
@Echo OFF
PowerShell .TestOutput1.ps1 1
ECHO ERRORLEVEL=%ERRORLEVEL%
I luga o le lau o le a tatou vaʻai i mea nei:
Out to host.
Out to output.
ExitCode: 1
1
ERRORLEVEL=1
Ia tatou faʻataʻitaʻiina le tusitusiga lava e tasi e ala ile WSMAN (mamao):
Invoke-Command -ComputerName . -ScriptBlock { &'D:sqlagentTestOutput1.ps1' $args[0] } -ArgumentList $args[0]
Ma o le taunuuga lenei:
Out to host.
Out to output.
ExitCode: 2
2
ERRORLEVEL=0
Sili, Errorlevel ua mou atu i se mea, ae e tatau ona tatou maua le tau mai le tusitusiga! Sei o tatou taumafai i le mamanu lenei:
$res=Invoke-Command -ComputerName . -ScriptBlock { &'D:sqlagentTestOutput1.ps1' $args[0] } -ArgumentList $args[0]
E sili atu le manaia o lenei mea. Ua mou atu le fe'au i le Output i se mea:
Out to host.
ExitCode: 2
ERRORLEVEL=0
I le taimi nei, i le avea ai o se faʻasalalauga faʻasalalau, o le a ou matauina afai i totonu o le Powershell galuega e te tusia ai Tusi-Output pe naʻo se faʻamatalaga e aunoa ma le tuʻuina atu i soʻo se fesuiaiga (ma o lenei mea e faʻaalia ai le gaioiga i le Output channel), e tusa lava pe taʻavale i le lotoifale, e leai se mea e fa'aalia i luga o le lau! O se taunuuga lea o le fausaga o le paipa powershell - o galuega taʻitasi e iai lana lava Pipa Output, ua faia se laina mo ia, ma o mea uma e alu i totonu e manatu o le taunuuga o le faʻatinoga o galuega, o le Return operator e faʻaopoopo le tau toe faʻafoʻi i le tutusa. pipeline e avea ma elemene mulimuli ma faʻafeiloaʻi le pule i le galuega valaʻau. Mo se faʻataʻitaʻiga, seʻi o tatou faʻataʻitaʻiina le tusitusiga lenei i le lotoifale:
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: "+$_) }
Ma o le taunuuga lenei:
Main: ParameterValue
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
2
Main: Function: ParameterValue
Main: ReturnValue
O le galuega autu (script body) o loʻo i ai foi lana lava Pipa Pipa, ma afai tatou te faʻatautaia le tusitusiga muamua mai le CMD, toe faʻafeiloaʻi le gaioiga i se faila,
PowerShell .TestOutput1.ps1 1 > TestOutput1.txt
ona tatou vaai lea i luga o le lau
ERRORLEVEL=1
ma i le faila
Out to host.
Out to output.
ExitCode: 1
1
pe a tatou faia se valaau faapena mai powershell
PS D:sqlagent> .TestOutput1.ps1 1 > TestOutput1.txt
ona i ai lea i luga o le lau
Out to host.
ExitCode: 1
ma i le faila
Out to output.
1
E tupu lenei mea ona o le CMD e faʻalauiloa le malosi, lea, i le leai o isi faʻatonuga, faʻafefiloi filo se lua (Host and Output) ma tuʻuina atu i le CMD, lea e lafoina mea uma na maua i se faila, ma i le tulaga o le tatalaina mai le powershell, o nei filo e lua o loʻo i ai eseese, ma o le faʻailoga toe faʻafeiloaʻi naʻo le aʻafiaga o le Output.
Toe foi atu i le autu autu, ia tatou manatua o le .NET mea faitino faataitaiga i totonu o le powershell o loo i ai atoatoa i totonu o le komepiuta e tasi (tasi OS), pe a tamoe code remotely e ala i WSMAN, o le fesiitaiga o mea e tupu e ala i XML serialization, lea e aumaia ai le tele o le fiafia faaopoopo. ia matou su'esu'ega. Sei o tatou faʻaauau a tatou suʻega e ala i le faʻaogaina o le code lea:
$res=Invoke-Command -ComputerName . -ScriptBlock { &'D:sqlagentTestOutput1.ps1' $args[0] } -ArgumentList $args[0]
$res.GetType()
$host.SetShouldExit($res)
Ma o le mea lenei o loʻo i luga o le lau:
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
Manaia le i'uga! O lona uiga pe a valaʻau Invoke-Command, o le vaevaega o paipa i ni filo se lua (Host and Output) o loʻo tausia, lea e maua ai le faʻamoemoe mo le manuia. Sei o tatou taumafai e tuʻu naʻo le tasi le tau i le Output stream, lea o le a tatou suia ai le uluaʻi tusitusiga tatou te tamoe mamao:
$exitcode = $args[0]
Write-Host 'Out to host.'
#Write-Output 'Out to output.'
Write-Host ('ExitCode: ' + $exitcode)
Write-Output $exitcode
$host.SetShouldExit($exitcode)
Se'i o tatou ta'e fa'apenei:
$res=Invoke-Command -ComputerName . -ScriptBlock { &'D:sqlagentTestOutput1.ps1' $args[0] } -ArgumentList $args[0]
$host.SetShouldExit($res)
ma... IOE, e foliga mai o se manumalo!
Out to host.
ExitCode: 4
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
ERRORLEVEL=4
Sei o tatou taumafai e iloa le mea na tupu. Na matou valaʻau i le Powershell i le lotoifale, lea na taʻua ai le Powershell i luga o le komepiuta mamao ma faʻatino a matou tusitusiga iina. E lua vaitafe (Host and Output) mai le masini mamao na faʻapipiʻiina ma toe pasi i tua, aʻo le Output stream, o loʻo i ai se tau numera tasi i totonu, na liua e faʻapipiʻi Int32 ma o lea na pasi atu i le itu e mauaina, ma faʻaaogaina e le itu na mauaina. e pei o le fa'ailoga e alu i fafo o le atigi malosi o le telefoni.
Ma o se siaki mulimuli, seʻi o tatou faia se galuega e tasi-laasaga i luga o le SQL server ma le ituaiga "Operating system (cmdexec)" faʻatasi ai ma le tusiga o loʻo i lalo:
PowerShell -NonInteractive -NoProfile "$res=Invoke-Command -ComputerName BACKUPSERVER -ConfigurationName SQLAgent -ScriptBlock {&'D:sqlagentTestOutput1.ps1' 6}; $host.SetShouldExit($res)"
HOORAY! Ua mae'a le galuega i se mea sese, tusitusiga i totonu o le ogalaau:
Выполняется от имени пользователя: DOMAINagentuser. Out to host. ExitCode: 6. Код завершения процесса 6. Шаг завершился с ошибкой.
Faaiuga:
- Aloese mai le fa'aogaina o le Tusia-Autput ma fa'amaoti fa'amatalaga e aunoa ma se fa'atonuga. Ia nofouta o le fesiitaiga o lenei code i se isi mea i totonu o le tusitusiga e ono maua ai ni taunuuga e le'i mafaufauina.
- I tusitusiga e leʻo faʻamoemoeina mo le faʻalauiloaina o tusi, ae mo le faʻaaogaina i au masini masini, aemaise lava mo telefoni mamao e ala i le WINRM, fai le faʻaogaina o mea sese e ala ile Try/Catch, ma faʻamautinoa, i soʻo se atinaʻe o mea tutupu, o lenei tusitusiga e auina atu saʻo lava le tasi le taua o le ituaiga. . Afai e te manaʻo e maua le Errorlevel masani, o lenei tau e tatau ona numera.
puna: www.habr.com