9

これが簡単な質問であることを願っています。特定のフォルダー内のすべてのファイルを操作する Powershell 関数があります。関数を 1 つのフォルダーで動作させたい場合と、パスが配列に格納されている複数のフォルダーで動作させたい場合があります。1 つの関数で 1 つの要素と配列の両方を受け入れる方法はありますか?

Do-Stuff $aSingleFolder

Do-Stuff $anArrayofFolders
4

3 に答える 3

9

関数内でプロセスセクションを実行することもできます。次のようになります。

Function Do-Stuff {
    param(
        [Parameter( `
            Mandatory=$True, `
            Valuefrompipeline = $true)]
        [String]$Folders
    )
    begin {
        #Things to do only once, before processing
    } #End Begin

    Process {
         #What  you want to do with each item in $Folders
    } #End Process 

    end {
        #Things to do at the end of the function, after all processes are done
    }#End end
} #End Function Do-Stuff

次に、関数を呼び出すとき。このようにしてください

$Folders | Do-Stuff

これが何が起こるかです。Beginブロック内のすべてが最初に実行されます。$Folders次に、変数内のアイテムごとに、Processブロック内のすべてが実行されます。それが完了すると、Endブロック内にあるものが実行されます。このようにして、関数に必要な数のフォルダーをパイプ処理できます。これは、いつかこの関数にパラメーターを追加したい場合に非常に役立ちます。

于 2012-08-08T20:11:43.773 に答える
7

Powershell では、配列と単一の要素を統一された方法で反復処理できます。

function Do-Stuff($folders) {
    foreach($f in $folders) {
        //do something with $f
    }
}

単一の要素を渡すと、指定されたアイテムで foreach が 1 回実行されます。

Do-Stuff "folder"
Do-Stuff "folder1", "folder2",...
于 2012-08-08T19:01:05.987 に答える
0

これは、cmd.exe を使用せずにファイルを使用して動作します。

 function Invoke-PlinkCommandsIOS { 
     param (
        [Parameter(Mandatory=$true)][string] $Host,
        [Parameter(Mandatory=$true)][System.Management.Automation.PSCredential] $Credential,
        [Parameter(Mandatory=$true)][string] $Commands,
        [Switch] $ConnectOnceToAcceptHostKey = $false
    )
     $PlinkPath="$PSScriptRoot\plink.exe"
    $commands | & "$PSScriptRoot\plink.exe" -ssh -2 -l $Credential.GetNetworkCredential().username -pw "$($Credential.GetNetworkCredential().password)" $Host -batch
 } 

使用法: exit と端末の長さが 0 であることを忘れないでください。

PS C:\> $Command = "terminal lenght 0
>> show running-config
>> exit
>> "
>>
PS C:\> Invoke-PlinkCommandsIOS -Host ace-dc1 -Credential $cred -Commands $Command

....

于 2015-02-19T16:02:13.843 に答える