如何在New-PSSession -Computername之后获取本地计算机名?

时间:2017-11-16 13:34:45

标签: powershell

我收到以下错误,请告知如何为空值表达式

修复此错误
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} 

3 个答案:

答案 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*

<小时/> 如果这不是您想要做的事情,请告诉我们,我们会帮您排序。