【问题标题】:Variable Type Issue For Parameter? - Powershell参数的变量类型问题? - 电源外壳
【发布时间】:2020-02-19 03:00:41
【问题描述】:

我正在尝试运行以下代码来搜索 OU 中的非活动用户帐户。似乎我正在使用的变量类型可能无法与参数一起使用。这看起来正确吗?如果正确,我应该使用什么类型的变量?

$scope = "-UsersOnly" 

$accounts = Search-ADAccount -SearchBase "OU=Users,OU=testLab02,DC=test,DC=local" -AccountInactive -TimeSpan ([timespan]7D) $scope
    foreach($account in $accounts){
        If ($noDisable -notcontains $account.Name) {
            Write-Host $account
            #Disable-ADAccount -Identity $account.DistinguishedName -Verbose $whatIf | Export-Csv $logFile
        }
    }

我收到以下错误:

Search-ADAccount:找不到接受参数“-UsersOnly”的位置参数。 在 C:\Users\Administrator\Documents\Disable-ADAccounts.ps1:63 char:21 + ... $accounts = Search-ADAccount -SearchBase $OU.DistinguishedName -Accou ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Search-ADAccount], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.ActiveDirectory.Management.Commands.SearchADAccount

但是,如果我在没有变量的情况下手动运行命令,它会按预期工作:

Search-ADAccount -SearchBase "OU=Users,OU=testLab02,DC=test,DC=local" -AccountInactive -TimeSpan ([timespan]7D) -UsersOnly

【问题讨论】:

  • PowerShell 错误消息的屏幕截图真的对于我们这些色盲且无法看到蓝色红色的人来说很难。也许改为发布文字?
  • 对不起,请看我的编辑。

标签: powershell parameters active-directory powershell-5.0


【解决方案1】:

$scope = "-UsersOnly"

您不能以这种方式传递存储在变量中的(开关)参数 - 它总是会被视为(位置)参数,这解释了你看到的错误;对于直接传递的参数,只有不带引号的文字标记,如-UsersOnly,被识别为参数名称。

您可以使用splatting 通过变量传递参数,这在您的情况下意味着:

# Define a hash table of parameter values.
# This hash table encodes switch parameter -UsersOnly
$scope = @{ UsersOnly = $true } # [switch] parameters are represented as Booleans

# Note the use of sigil @ instead of $ to achieve splatting
Search-ADAccount @scope -SearchBase "OU=Users,OU=testLab02,DC=test,DC=local" -AccountInactive -TimeSpan ([timespan]7D) 
  • $scope 定义为 hash table (@{ ... }),其条目表示参数名称-值对

    • 这里只定义了一个参数名-值对:
      • 参数名称-UsersOnly(输入键必须定义为没有- sigil)...
      • ... 值为$true,对于[switch](标志)参数等价于传递该参数; $false 通常[1] 等同于省略它。
  • 1234563 >

[1] 命令可以在技术上区分开关被省略和它被传递的值$false,并且有时会导致不同的行为,特别是与常见的@ 987654342@ 参数,其中-Confirm:$false 覆盖 $ConfirmPreference 首选项变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多