我正在尝试使用New-ADGroup创建一些Active Directory安全组,但我需要能够在批处理文件中执行这些安全组。我的目标是让脚本提示运行它的用户输入OU和在组名前面使用的分支前缀。
我刚刚开始使用Powershell,所以我仍然没有100%使用不同的括号和引号,我怀疑这是我的问题。
这是我的原始代码:
SET /P OU=Enter OU:
Set /P Prefix=Enter Prefix:
Powershell New-ADGroup -Name “%Prefix%-OWA Test” -SamAccountName “%Prefix%-OWA Test” -GroupCategory Security -GroupScope Global -path "OU=Groups,OU=%OU%,OU=Test1,DC=Test2,DC=Test3,DC=Test4,DC=com”
我能够在PowerShell中执行命令,以便批处理文件中的某些内容导致我的问题。我也尝试从等式中删除变量,然后执行以下操作:
powershell New-ADGroup -Name "ORF-OWA Test" -SamAccountName "ORF-OWA Test" -GroupCategory Security -GroupScope Global -path "OU=Groups,OU=Branch1,OU=Test1,DC=Test2,DC=Test3,DC=Test4,DC=com”
在这两种情况下我都收到以下错误:
New-ADGroup : Cannot convert 'System.Object[]' to the type 'System.String'
required by parameter 'Path'. Specified method is not supported.
At line:1 char:110
+ ... e Global -path OU=Groups,OU=Branch1
,OU=Test,DC=Test1,DC=Test2,DC=Test3,DC=com -Des ...
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [New-ADGroup], ParameterBin
dingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.ActiveDirectory.
Management.Commands.NewADGroup
我读这篇文章的方式是错误的“Path”参数,但我不确定为什么在PowerShell中成功但不是从cmd提示符或bat文件中成功。
任何建议都将不胜感激。
答案 0 :(得分:1)
在批处理文件中使用PowerShell时,您必须记住该行将被解析两次。首先是CMD,然后是PowerShell。这样做的个人规则是
示例:单引号:
Powershell New-ADGroup -Name '%Prefix%-OWA Test' -SamAccountName '%Prefix%-OWA Test' -GroupCategory Security -GroupScope Global -path 'OU=Groups,OU=%OU%,OU=Test1,DC=Test2,DC=Test3,DC=Test4,DC=com'
示例:显式命令,Scoped和用双引号括起来:
PowerShell -Command "&{New-ADGroup -Name '%Prefix%-OWA Test' -SamAccountName '%Prefix%-OWA Test' -GroupCategory Security -GroupScope Global -path 'OU=Groups,OU=%OU%,OU=Test1,DC=Test2,DC=Test3,DC=Test4,DC=com'}"
我没有时间测试这些是否有效,但试一试;)
为了说明工作命令(注意它还需要两个输入变量),这里是我的一个批量powershell命令我用:
PowerShell -Command "&{$nlm = [Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]'{DCB00C01-570F-4A9B-8D69-199FDBA5723B}')); $connections = $nlm.getnetworkconnections(); $connections | foreach { if ($_.GetNetwork().GetCategory() -eq %Filter%) { $_.GetNetwork().SetCategory(%Category%); } }; }"