我收到以下错误,请告知如何为空值表达式
修复此错误You cannnot call a method on a null-valued expression
+CategoryInfo : InvalidOoperation: (:)[], RuntimeException
+FullyQualifiedErrorId: InvokeMethodonNull
+PSComputerName: DC1
以下代码
function myfunction (){
$remoteserver = 'DC1'
$Session = New-PSSession -Computername $remoteserver -Credential $Cred
Import-Module ActiveDirectory
$local= $env:COMPUTERNAME
Invoke-Command -ComputerName $remoteserver -Credential $cred -ScriptBlock
{$using:local
if($local.substring(5,3) -imatch "Sys") {
Get-ADComputer $local | Move-ADObject -Targetpath "ou=PRD,ou=Servers,dc=com,dc=Companycorp,dc=net"}
}
} #end function
Invoke-Command -ComputerName $remoteserver -ScriptBlock ${Function:myFunction}
答案 0 :(得分:0)
您必须使用Invoke-Command
:
$session = New-PSSession -Computername DC01 -Credential $cred
Invoke-Command -Session $session -ScriptBlock {
$remoteComputerName = $env:computername
}
答案 1 :(得分:0)
您正在寻找的是$using:
范围。如果定义要在远程执行中使用的变量,则需要访问它们,如:
$PC = $env:ComputerName
Invoke-Command -Computer DC01 -ScriptBlock { $using:PC <# logic #> }
如果您想远程进入DC01
以对localhost
运行命令,那么由于Kerberos,您将遇到第二跳问题。
更新:你的新例子看起来很复杂。这是一个应该有效的例子:
$MyPC = $env:ComputerName
$Session = New-PSSession -Credential (Get-Credential) -ComputerName 'DC1'
Invoke-Command -Session $Session -ScriptBlock {
Import-Module -Name 'ActiveDirectory'
$PC = $using:MyPC
If ($PC.Substring(5,3) -eq 'sys')
{
Get-ADComputer -Identity $PC |
Move-ADObject -TargetPath 'ou=PRD,ou=Servers,dc=com,dc=Companycorp,dc=net'
}
}
答案 2 :(得分:0)
我认为您要问的是如何在远程PC上打开会话,但仍然可以在我的本地PC上运行命令&#39;。如果是这样,那么让我们来看看它。
首先,我们可以通过创建新的PSSession打开与PowerShell中另一台计算机的远程连接,就像您在此处所做的那样:
$session = New-PSSession -Computername DC01 -Credential $cred
然后,您可以使用Enter-PSSession
完全步入远程计算机,或者使用以下命令将单个命令发送到远程计算机:
Invoke-Command -ScriptBlock {#Commands to run on the remote PC}`
-Session $session
进入远程PC后,您可以使用Exit-PSSession
命令返回自己的PC。
#Enter Remote PC
Enter-PSSession $session
DC01> hostname
*DC01*
#Step out of Remote PC
Exit-PSSession
PS> hostname
*YOURPCNAME*
<小时/> 如果这不是您想要做的事情,请告诉我们,我们会帮您排序。