【发布时间】:2015-08-18 10:20:08
【问题描述】:
首先,对于发布有关 PowerShell 和选项卡补全的另一个问题,我深表歉意。 StackOverflow 系统确定了几个与这个主题相关的优秀问题的答案,但它们似乎都太麻烦了,无法在这个简单的New-ADComputer 脚本中实现。
参数将进入Splat 以保持脚本可读。以下代码在 ISE 中正确完成制表符,但必须用双引号括起来。
PowerShell 中是否有任何本机方法允许包含空格的参数集的制表符完成?
Param(
[Parameter(Mandatory=$true)]
[string]$Server,
[Parameter(Mandatory=$true)]
[ValidateSet('Env1','Env 2','Env 3')]
[string]$Environment,
[Parameter(Mandatory=$true)]
[ValidateSet('Application','Database','File and Print','Web Server')]
[string]$Type
)
$NewADitems = @{
Name = $server
Path = "OU=$Type,OU=$Environment,OU=Smaller DN string"
Location ='MySite'
Description = "Test Description"
ManagedBy = "Huge Distingushed Name string"
WhatIf = $true
}
Write-Host @NewADitems
使用的命令和收到的错误:
PS C:\Scripts> .\ADComputer-ParamTest.ps1 -Server ThisTest -Environment Env 3 -Type File and Print
C:\Scripts\ADComputer-ParamTest.ps1 : Cannot validate argument on parameter
'Environment'. The argument "Env" does not belong to the set "Env1,Env 2,Env3"
specified by the ValidateSet attribute. Supply an argument that is in the
set and then try the command again.At line:1 char:58
+ .\ADComputer-ParamTest.ps1 -Server ThisTest -Environment Env 3 -Type File and Pr ...
+ ~~~
编辑:更多信息。如果您在我的示例脚本中为参数Environment 省略单引号/双引号,则制表符补全将不适用于最终参数Type。将第二组用引号括起来可以纠正这种情况,但这是一种密切注意这种行为的方法。
【问题讨论】:
-
引用要求非常严格,可能与制表符补全问题最相关。我可以建议将此问题的范围限制为选项卡完成吗?我认为保持隔离已经足够不同了。它向我展示了关于带有空格的制表符完成的新事物,我认为这是不可能的。将 New-ADComputer splatting 问题分解为一个单独的问题可能会带来更多的观点/答案。
-
P.S.包含指向此原始问题的链接以显示相关代码和已完成的故障排除可能会有所帮助。我很想看到这个问题得到了解决问题的可靠答案。
-
公平点,我为 New-ADComputer 所做的每一次搜索和喷溅都会在这里结束!!!我猜这个脚本需要两个函数,第一个启动选项卡完成字符串,然后传递给带有开关参数的第二个函数,该参数将允许一个空间然后执行工作。
标签: powershell active-directory