Iweghachi uru sitere na oku oku-iwu na onye nnọchite SQL Server

Mgbe m na-eke usoro nke m maka ijikwa nkwado ndabere na mpaghara ọtụtụ sava MS-SQL, ejiri m ọtụtụ oge mụọ usoro maka ịgafe ụkpụrụ na Powershell n'oge oku dịpụrụ adịpụ, yabụ ana m edetara onwe m ihe ncheta ma ọ bụrụ na ọ bara uru. nye onye ozo.

Yabụ, ka anyị bido na edemede dị mfe wee mee ya na mpaghara:

$exitcode = $args[0]
Write-Host 'Out to host.'
Write-Output 'Out to output.'
Write-Host ('ExitCode: ' + $exitcode)
Write-Output $exitcode
$host.SetShouldExit($exitcode)

Iji mee scripts, m ga-eji faịlụ CMD ndị a, agaghị m etinye ya oge ọ bụla:

@Echo OFF
PowerShell .TestOutput1.ps1 1
ECHO ERRORLEVEL=%ERRORLEVEL%

Na ihuenyo anyị ga-ahụ ihe ndị a:

Out to host.
Out to output.
ExitCode: 1
1
ERRORLEVEL=1


Ugbu a, ka anyị jiri WSMAN mee otu edemede ahụ (remotely):

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

Ma ebe a bụ nsonaazụ:

Out to host.
Out to output.
ExitCode: 2
2
ERRORLEVEL=0

Ọ dị mma, Errorlevel apụọla ebe, mana anyị kwesịrị inweta uru site na edemede ahụ! Ka anyị gbalịa imewe ndị a:

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

Nke a na-adọrọ mmasị ọbụna karị. Ozi dị na Mmepụta apụọla n'otu ebe:

Out to host.
ExitCode: 2
ERRORLEVEL=0

Ugbu a, dị ka egwu egwu egwu, m ga-arịba ama na ọ bụrụ n'ime ọrụ Powershell ị na-edepụta ihe mmepụta ma ọ bụ naanị okwu na-ekenyeghị ya na mgbanwe ọ bụla (nke a na-egosikwa mmepụta na ọwa mmepụta), mgbe ahụ ọbụna mgbe ị na-agba ọsọ na mpaghara, ọ dịghị ihe ga-egosipụta na ihuenyo! Nke a bụ nsonaazụ nke ụlọ ọrụ pipeline powershell - ọrụ ọ bụla nwere pipeline mmepụta nke ya, a na-ekepụta ya n'usoro, yana ihe niile na-abanye n'ime ya bụ nsonaazụ nke arụrụ ọrụ ahụ, onye ọrụ nlọghachi na-agbakwunye uru nloghachi na otu. pipeline dị ka ihe ikpeazụ na-enyefe njikwa na ọrụ oku. Iji maa atụ, ka anyị mee edemede a na mpaghara:

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 ebe a bụ nsonaazụ:

Main: ParameterValue

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array
2
Main: Function: ParameterValue
Main: ReturnValue

Isi ọrụ (ahụ script) nwekwara pipeline mmepụta nke ya, ma ọ bụrụ na anyị na-agba ọsọ edemede mbụ site na CMD, na-ebugharị mmepụta na faịlụ,

PowerShell .TestOutput1.ps1 1 > TestOutput1.txt

mgbe ahụ, anyị ga-ahụ na ihuenyo

ERRORLEVEL=1

na faịlụ

Out to host.
Out to output.
ExitCode: 1
1

ọ bụrụ na anyị na-akpọ oku yiri nke ahụ site na powershell

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

mgbe ahụ, ọ ga-adị na ihuenyo

Out to host.
ExitCode: 1

na faịlụ

Out to output.
1

Nke a na-eme n'ihi na CMD na-ebupụta powershell, nke, na enweghị ntụziaka ndị ọzọ, na-ejikọta eriri abụọ (Onye ọbịa na mmepụta) ma nye ha CMD, nke na-eziga ihe niile ọ natara na faịlụ, na n'ihe banyere ịgba ọsọ site na powershell. eri abụọ a dị iche iche, na akara redirects na-emetụta naanị Mmepụta.

Na-alaghachi na isi isiokwu, ka anyị cheta na .NET ihe nlereanya n'ime powershell zuru ezu dị n'ime otu kọmputa (otu OS), mgbe na-agba ọsọ code remotely site WSMAN, nyefe nke ihe na-eme site na XML serialization, nke na-eweta ọtụtụ mmasị ọzọ. na nyocha anyị. Ka anyị gaa n'ihu nnwale anyị site na iji koodu a:

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

Ma nke a bụ ihe anyị nwere na ihuenyo:

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

Nnukwu nsonaazụ! Ọ pụtara na mgbe ị na-akpọ Invoke-Command, a na-edobe nkewa nke pipeline n'ime eriri abụọ (Onye ọbịa na mmepụta), nke na-enye anyị olileanya maka ịga nke ọma. Ka anyị gbalịa ịhapụ naanị otu uru na iyi mmepụta, nke anyị ga-agbanwe nke mbụ edemede anyị na-agba ọsọ ọsọ:

$exitcode = $args[0]
Write-Host 'Out to host.'
#Write-Output 'Out to output.'
Write-Host ('ExitCode: ' + $exitcode)
Write-Output $exitcode
$host.SetShouldExit($exitcode)

Ka anyị mee ya dị ka nke a:

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

na... EE, ọ dị ka mmeri!

Out to host.
ExitCode: 4

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Int32                                    System.ValueType


ERRORLEVEL=4

Ka anyị gbalịa chọpụta ihe merenụ. Anyị na-akpọ powershell na mpaghara, nke a na-akpọ powershell na kọmputa dịpụrụ adịpụ ma mebie edemede anyị n'ebe ahụ. A na-edobe iyi abụọ (Onye ọbịa na mmepụta) site na igwe dịpụrụ adịpụ wee laghachi azụ, ebe iyi mmepụta ahụ, nke nwere otu ọnụọgụ dijitalụ na ya, gbanwere ka ọ bụrụ ụdị Int32 ma dị ka nke a gafere n'akụkụ nke nnata, na akụkụ nke nnata na-eji ya. dị ka koodu ọpụpụ nke onye na-akpọ powershell.

Ma dị ka nlele ikpeazụ, ka anyị mepụta ọrụ otu nzọụkwụ na sava SQL nwere ụdị “Sistemụ arụmọrụ (cmdexec)” na ederede na-esonụ:

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

HOORAY! Emechara ọrụ ahụ site na mperi, ederede na log:

Выполняется от имени пользователя: DOMAINagentuser. Out to host. ExitCode: 6.  Код завершения процесса 6.  Шаг завершился с ошибкой.

Mkpebi:

  • Zere iji Mpụta-Dee na ịkọwapụta okwu na-enweghị ọrụ. Mara na ịkwaga koodu a n'ebe ọzọ na edemede nwere ike iwepụta nsonaazụ a na-atụghị anya ya.
  • N'ime edemede ezubere ọ bụghị maka mmalite akwụkwọ ntuziaka, kama maka iji ya na usoro akpaaka gị, ọkachasị maka oku dịpụrụ adịpụ site na WINRM, mee njehie ntuziaka site na Gbalịa/Catch, wee hụ na, na mmepe ọ bụla nke mmemme, edemede a na-ezipụ otu ụdị uru mbụ. . Ọ bụrụ na ịchọrọ ịnweta Errorlevel kpochapụwo, uru a ga-abụrịrị ọnụọgụ.

isi: www.habr.com

Tinye a comment