PowerShell 5 で初めて、別の関数からファイルにメッセージを書き込む関数を呼び出すのに問題があります。以下は、私がやっていることの簡略化されたバージョンです。
workflow test {
function logMessage {
param([string] $Msg)
Write-Output $Msg
}
function RemoveMachineFromCollection{
param([string]$Collection, [string]$Machine)
# If there's an error
LogMessage "Error Removing Machine"
# If all is good
LogMessage "successfully remove machine"
}
$Collections = DatabaseQuery1
foreach -parallel($coll in $Collections) {
logMessage "operating on $coll collection"
$Machines = DatabaseQuery2
foreach($Mach in $Machines) {
logMessage "Removing $Mach from $coll"
RemoveMachineFromCollection -Collection $coll -Machine $Mach
}
}
}
test
生成されるエラーは次のとおりです。
「logMessage」という用語は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認してから再試行してください。 + CategoryInfo : ObjectNotFound: (logMessage:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException + PSComputerName : [ローカルホスト]
ファイル内で logMessage 関数を移動しようとしましたが、グローバル スコープも試しました。
他の言語では、他の関数から logMessage を呼び出すことができます。それが関数の目的だからです。
コードのブロックを再利用する「ワークフローの方法」は何ですか?
ワークフローに読み込まれるロギング モジュールを作成する必要がありますか?