Mat*_* G. 3 powershell powershell-2.0
我对 Powershell 还很陌生,但我在 VBScript 和 Python 方面有很多经验。我正在努力成为一名优秀的 Windows 管理员并更多地使用 Powershell。所以,这就是我想要做的:父文件夹包含数十个名为 AD 用户名的子文件夹(例如,Users\username1、Users\username2,其中 Users 是父文件夹)。我想遍历每个文件夹名称,解析出子文件夹名称,并将其传递给 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}
Run Code Online (Sandbox Code Playgroud)
它最初并不那么粗糙,但是当我遇到问题时,我开始将其分解。
问题- 在 $cmd3 中,(OI)(CI) 没有完全进入调用表达式。如果我将 $cmd3 更改为 ":F" 它可以工作,但我必须使用有问题的参数设置继承。请帮忙。我一整天都在绞尽脑汁想这个。无法真正找到专门处理此问题的任何内容(尝试反引号,将 $command 引用为“$command”等)
错误: 术语“OI”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。在第 1 行字符:56 + icacls C:\temp\test\garthwaitm /grant domain\user1 :(OI <<<< )(IO)F + CategoryInfo : ObjectNotFound: (OI:String) [], CommandNotFoundException +fullyQualifiedErrorId : CommandNotFoundException
只是补充一下这个老问题,在 PowerShell 3.0 中,您现在可以使用 --% 告诉 PowerShell 停止处理在线上的任何其他内容,因此您可以使用以下内容:
icacls.exe $path --% /grant "Everyone:(OI)(CI)(F)"
您是否尝试过使用引号$command,例如Invoke-Expression "$command"?此处讨论了防止处理括号的其他技术:http ://msdn.microsoft.com/en-us/library/cc281841.aspx
| 归档时间: |
|
| 查看次数: |
14007 次 |
| 最近记录: |