【问题标题】:script line works on dc but not while using invoke command脚本行在 dc 上有效,但在使用调用命令时无效
【发布时间】:2020-09-08 23:33:46
【问题描述】:

我有一个变量 $user ,其中存储了一个 AD 用户。 我想更改其 UPN。 如果我在 dc 上写这个:

$user | set-aduser -UserPrincipalName bla@bla.bla

它工作正常。 但是如果我像这样使用调用命令

Invoke-Command -Session $S -ScriptBlock  {$using:ADUSER | set-aduser -userprincipalname bla@bla.bla}

我得到一个错误(假设 $s 是一个很好的会话,我在其他行中使用它) 我的错误是:

输入对象不能绑定到命令的任何参数,因为命令不接受管道输入或输入及其 属性与任何接受管道输入的参数都不匹配。 + CategoryInfo : InvalidArgument: (CN=uzi,OU=IT,OU...shahar,DC=local:PSObject) [Set-ADUser], ParameterBindingException + FullyQualifiedErrorId : InputObjectNotBound,Microsoft.ActiveDirectory.Management.Commands.SetADUser + PSComputerName : dc01

已编辑:广告用户的行

$uname =  $script:textbox1.text+"@"+$script:textbox2.text

$ADUSER = Invoke-Command  -Session $S -ScriptBlock {Get-aduser -property 'emailaddress' -filter "UserPrincipalName -eq '$using:UNAME'"}

有人可以帮忙吗?

【问题讨论】:

  • 假设$ADUSER 是samaccountname(例如jdoe1234)尝试Invoke-Command -Session $S -ScriptBlock {set-aduser -identity $using:ADUSER -userprincipalname bla@bla.bla}
  • 您的代码没有定义$AdUser ...请将其添加到您的代码中,这样人们就可以做一些绝杀而不是胡乱猜测... [grin]

标签: powershell command invoke


【解决方案1】:

我认为您应该在脚本块中添加一个参数块并使用它

类似

Invoke-Command -Session $S -ScriptBlock {param ($ADUser, $UPN = 'someone@bla.bla'); $ADUser | Set-ADUser -UserPrincipalName $UPN } -ArgumentList $ADUser, 'bla@bla.bla'

或更好的可读性:

$scriptBlock = {
    param (
        $ADUser, 
        $UPN = 'someone@bla.bla'
    )
    $ADUser | Set-ADUser -UserPrincipalName $UPN
}
Invoke-Command -Session $S -ScriptBlock $scriptBlock -ArgumentList $ADUser, 'bla@bla.bla'

【讨论】:

    猜你喜欢
    • 2021-11-13
    • 2017-03-26
    • 2013-02-07
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 2011-12-08
    相关资源
    最近更新 更多