これが簡単な質問であることを願っています。特定のフォルダー内のすべてのファイルを操作する Powershell 関数があります。関数を 1 つのフォルダーで動作させたい場合と、パスが配列に格納されている複数のフォルダーで動作させたい場合があります。1 つの関数で 1 つの要素と配列の両方を受け入れる方法はありますか?
Do-Stuff $aSingleFolder
Do-Stuff $anArrayofFolders
これが簡単な質問であることを願っています。特定のフォルダー内のすべてのファイルを操作する Powershell 関数があります。関数を 1 つのフォルダーで動作させたい場合と、パスが配列に格納されている複数のフォルダーで動作させたい場合があります。1 つの関数で 1 つの要素と配列の両方を受け入れる方法はありますか?
Do-Stuff $aSingleFolder
Do-Stuff $anArrayofFolders
関数内でプロセスセクションを実行することもできます。次のようになります。
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
ブロック内にあるものが実行されます。このようにして、関数に必要な数のフォルダーをパイプ処理できます。これは、いつかこの関数にパラメーターを追加したい場合に非常に役立ちます。
Powershell では、配列と単一の要素を統一された方法で反復処理できます。
function Do-Stuff($folders) {
foreach($f in $folders) {
//do something with $f
}
}
単一の要素を渡すと、指定されたアイテムで foreach が 1 回実行されます。
Do-Stuff "folder"
Do-Stuff "folder1", "folder2",...
これは、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
....