Powershellではかなり新しくなっていますが、VBScriptとPythonでは多くの経験があります。私はWindowsの管理者としてPowershellにもっと挑戦しようとしています。だから私がやろうとしていることは次のとおりです。 親フォルダには、ADユーザ名(例:Users \ username1、Users \ username2、Usersは親フォルダ)という名前のサブフォルダが数十含まれています。私は各フォルダ名をループし、サブフォルダ名を解析し、それをicaclsに渡してユーザ名に基づいてパーミッションを適用したいと思います。私は問題のパイピングに走っていたので、私はマルチライナーをしました。Powershell - パラメータにparanthesesが含まれているicaclsを呼び出す
$root_folder = "c:\temp\test"
$cmd1 = "icacls "
$cmd2 = " /grant cm\"
$cmd3 = ":`(OI`)`(CI`)F"
$paths_collection = get-childitem $root_folder | foreach-object -process {$_.FullName}
foreach ($path in $paths_collection)
{$string = $path.split("\");$last = $string[-1];$command = $cmd1 + $path +$cmd2 +$last +$cmd3;invoke-expression $command}
は、もともとはこの荒れはありませんでしたが、私は私が問題に実行していたとき、それを離れて壊す開始しました:これは、いくつかの異なるアプローチを試した後、私が持っているものです。
問題$- $ cmd3では、(OI)(CI)がinvoke-expressionにきれいには入っていません。 $ cmd3を単に ":F"に変更しても機能しますが、問題のパラメータを使用して継承を設定する必要があります。助けてください。私はこの1日中、私の脳を一日中つづけています。本当に(など「$コマンド」として$コマンドを参照して、試してみましたバッククォート)を、特にこの問題に対処何かを見つけることができませんでした
ERROR:用語「OIは」の名前として認識されません コマンドレット、関数、スクリプトファイル、または実行可能なプログラムです。スペルを の名前で確認するか、パスが含まれている場合は、パスが正しいことを確認してから、もう一度やり直してください。ラインで :1つの文字:56 +はC ICACLS:\一時\テスト\のgarthwaitm /許可ドメイン\ USER1:(OI < < < <)(IO)F + CategoryInfo:ObjectNotFound:(OI:String)を[ ]、CommandNotFoundException + FullyQualifiedErrorId:CommandNotFoundException
文字列連結は、ここで作成するよりもはるかに簡単です。 '$ command =" $ cmd1 $ path $ cmd2 $ last $ cmd3'を実行して、それが何を実行しているかを確認することができます。その変数を書き出すだけであれば、何が出力されますか? – JNK
私はそれを行い、文字列は正しく。しかし、Invoke-Expressionが呼び出されて正しく解析されない(私が信じる)ときです。私はbobbymcrがそれを下に得たと思う。しかし、ありがとう! –