第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何使用Invoke-Command傳遞命名參數(shù)?

如何使用Invoke-Command傳遞命名參數(shù)?

慕標(biāo)5832272 2019-12-26 10:18:23
我有一個(gè)可以通過Invoke-Command遠(yuǎn)程運(yùn)行的腳本Invoke-Command -ComputerName (Get-Content C:\Scripts\Servers.txt) `               -FilePath C:\Scripts\ArchiveEventLogs\ver5\ArchiveEventLogs.ps1只要我使用默認(rèn)參數(shù),它就可以正常工作。但是,該腳本具有2個(gè)名為[switch]的參數(shù)(-Debug和-Clear)如何通過調(diào)用命令傳遞已切換的參數(shù)?我已經(jīng)嘗試過-ArgumentList,但是出現(xiàn)錯(cuò)誤,因此我必須使用錯(cuò)誤的語法或其他內(nèi)容。任何幫助是極大的贊賞。
查看完整描述

3 回答

?
千萬里不及你

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊

-ArgumentList基于與腳本塊命令一起使用,例如:


Invoke-Command -Cn (gc Servers.txt) {param($Debug=$False, $Clear=$False) C:\Scripts\ArchiveEventLogs\ver5\ArchiveEventLogs.ps1 } -ArgumentList $False,$True

當(dāng)您使用a調(diào)用它時(shí),-File它仍會(huì)像啞啞數(shù)組那樣傳遞參數(shù)。我已經(jīng)提交了功能請(qǐng)求,以將其添加到命令中(請(qǐng)對(duì)此進(jìn)行投票)。


因此,您有兩個(gè)選擇:


如果您有一個(gè)看起來像這樣的腳本,那么該腳本位于遠(yuǎn)程機(jī)器可以訪問的網(wǎng)絡(luò)位置(請(qǐng)注意,這-Debug是因?yàn)楫?dāng)我使用該P(yáng)arameter屬性時(shí),該腳本隱式地獲取了CmdletBinding,因此,所有通用參數(shù)也都包含在內(nèi)):


param(

   [Parameter(Position=0)]

   $one

,

   [Parameter(Position=1)]

   $two

,

   [Parameter()]

   [Switch]$Clear

)


"The test is for '$one' and '$two' ... and we $(if($DebugPreference -ne 'SilentlyContinue'){"will"}else{"won't"}) run in debug mode, and we $(if($Clear){"will"}else{"won't"}) clear the logs after."

如果$Clear不想調(diào)用... 的含義,則可以使用以下兩種Invoke-Command語法之一:


icm -cn (gc Servers.txt) { 

    param($one,$two,$Debug=$False,$Clear=$False)

    C:\Scripts\ArchiveEventLogs\ver5\ArchiveEventLogs.ps1 @PSBoundParameters

} -ArgumentList "uno", "dos", $false, $true

在那篇文章中,我將在腳本塊中復(fù)制我關(guān)心的所有參數(shù),以便可以傳遞值。如果我可以對(duì)它們進(jìn)行硬編碼(這是我實(shí)際上所做的),則無需這樣做并使用PSBoundParameters,我只需傳遞所需的內(nèi)容即可。在下面的第二個(gè)示例中,我將傳遞$ Clear,只是為了演示如何傳遞開關(guān)參數(shù):


icm -cn $Env:ComputerName { 

    param([bool]$Clear)

    C:\Scripts\ArchiveEventLogs\ver5\ArchiveEventLogs.ps1 "uno" "dos" -Debug -Clear:$Clear

} -ArgumentList $(Test-Path $Profile)

另一種選擇

如果腳本在您的本地計(jì)算機(jī)上,并且您不想將參數(shù)更改為位置參數(shù),或者您想指定作為通用參數(shù)的參數(shù)(因此您無法控制它們),則需要獲取以下內(nèi)容:該腳本并將其嵌入到您的scriptblock中:


$script = [scriptblock]::create( @"

param(`$one,`$two,`$Debug=`$False,`$Clear=`$False)

&{ $(Get-Content C:\Scripts\ArchiveEventLogs\ver5\ArchiveEventLogs.ps1 -delimiter ([char]0)) } @PSBoundParameters

"@ )


Invoke-Command -Script $script -Args "uno", "dos", $false, $true

后記:

如果您確實(shí)需要為腳本名稱傳遞一個(gè)變量,那么您將執(zhí)行的操作將取決于該變量是在本地還是遠(yuǎn)程定義的。在一般情況下,如果你有一個(gè)變量$Script或環(huán)境變量$Env:Script與腳本的名稱,就可以與呼叫運(yùn)營商()執(zhí)行它:&$Script或&$Env:Script


如果它是已經(jīng)在遠(yuǎn)程計(jì)算機(jī)上定義的環(huán)境變量,則僅此而已。如果它是局部變量,則必須將其傳遞給遠(yuǎn)程腳本塊:


Invoke-Command -cn $Env:ComputerName { 

    param([String]$Script, [bool]$Clear)

    &$Script "uno" "dos" -Debug -Clear:$Clear

} -ArgumentList $ScriptPath, $(Test-Path $Profile)


查看完整回答
反對(duì) 回復(fù) 2019-12-26
?
當(dāng)年話下

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊

我的解決方案是使用[scriptblock]:Create以下命令動(dòng)態(tài)編寫腳本塊:


# Or build a complex local script with MARKERS here, and do substitutions

# I was sending install scripts to the remote along with MSI packages

# ...for things like Backup and AV protection etc.


$p1 = "good stuff"; $p2 = "better stuff"; $p3 = "best stuff"; $etc = "!"

$script = [scriptblock]::Create("MyScriptOnRemoteServer.ps1 $p1 $p2 $etc")

#strings get interpolated/expanded while a direct scriptblock does not


# the $parms are now expanded in the script block itself

# ...so just call it:

$result = invoke-command $computer -script $script

傳遞參數(shù)是非常令人沮喪,嘗試各種方法,例如

-arguments,$using:p1等,如沒有問題,期望這只是工作。


由于我控制以[scriptblock]這種方式創(chuàng)建(或腳本文件)的字符串的內(nèi)容和變量擴(kuò)展,因此“ invoke-command”命令沒有真正的問題。


(不應(yīng)該那么難。:))


查看完整回答
反對(duì) 回復(fù) 2019-12-26
?
料青山看我應(yīng)如是

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊

我懷疑這是自創(chuàng)建該帖子以來的一項(xiàng)新功能-使用$ Using:var將參數(shù)傳遞到腳本塊。然后,如果腳本已在計(jì)算機(jī)上或相對(duì)于計(jì)算機(jī)的已知網(wǎng)絡(luò)位置中,則傳遞參數(shù)很簡單


以主要示例為例:


icm -cn $Env:ComputerName { 

    C:\Scripts\ArchiveEventLogs\ver5\ArchiveEventLogs.ps1 -one "uno" -two "dos" -Debug -Clear $Using:Clear

}


查看完整回答
反對(duì) 回復(fù) 2019-12-26
  • 3 回答
  • 0 關(guān)注
  • 1571 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)