【问题标题】:How can I access methods of dynamically created variables?如何访问动态创建的变量的方法?
【发布时间】:2017-10-16 22:10:45
【问题描述】:

我对 PowerShell 还很陌生,我尝试做这样的事情:

$sshictcred = New-Object 
System.Management.Automation.PSCredential("username",$password)

New-Variable -Name $Server"session" -Value (New-SSHSession -ComputerName 
$Server -Credential($credentials))

New-Variable -Name $Server"stream" -Value ("`$"(Get-Variable -Name 
$Server"session" | % Name).Session.CreateShellStream("PS-SSH", 0, 0, 0, 0, 1000))

我的问题:

在最后一个命令中,我收到错误“您不能在空值表达式上调用方法”。我猜这是因为它缺少 $ 符号,因为它应该生成先前设置的变量的名称。

所以我从之前生成的变量中创建了一个新的“我相信动态”变量。

创建新的 var -Value 后我想要的输出:

 $PREVVARNAME.Session.CreateShellStream(xxxxx)

简化的我认为我想要一个像这样生成的字符串: GET-VAR 命令的“$”输出为字符串“session”

【问题讨论】:

  • 您好,欢迎来到 StackOverflow。请查看帮助中心 (How do I ask a good question) 或拨打tour
  • 请编辑问题并用简单的英语解释您要达到的目标。代码示例有点奇怪,因此可能有更简单的方法来获得所需的结果。

标签: powershell scripting


【解决方案1】:

我无权访问这些 cmdlet,但您似乎只是想在此处创建一些动态变量并使用一些相关方法。

首先让我们捕获第一个动态变量的输出并保存它。

$serversession = New-Variable -Name $Server"session" -Value (New-SSHSession -ComputerName $Server -Credential($credentials)) -Passthru

所以现在$serversession 将是一个System.Management.Automation.PSVariable,它至少有一个名称和值属性。

现在我们可以使用$serversession来执行我们的下一个操作

$serversession.Value.Session.CreateShellStream("PS-SSH", 0, 0, 0, 0, 1000))

应该这样做。

我个人会质疑这里是否需要动态变量。如果您计划有多个并发会话可能......但是有很多方法可以解决这个问题。

例如像一个哈希表

$sessions = @{}
$sessions["$Server"] = New-SSHSession -ComputerName $Server -Credential($credentials)
$sessions["$Server"].Session.CreateShellStream("PS-SSH", 0, 0, 0, 0, 1000))

【讨论】:

  • 请理解我刚刚开始学习使用 powershell 编写脚本,所以我很难跟上一些脚本术语。这个想法确实是构建多个 SSH 会话(因为这对每台服务器来说都是相同的技巧,但随后在服务器 1 上“做某事”但在服务器 2 上“做其他事情”对我来说很棘手。所以对于每台服务器,我需要维护一个会话,我需要能够访问该会话以执行操作。我解释得对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 2020-04-24
  • 2016-08-31
  • 1970-01-01
  • 2018-02-28
  • 2021-01-03
  • 1970-01-01
相关资源
最近更新 更多