2017-10-16 48 views
0

我是相當新的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)) 

我的問題:

在最後一個命令我得到的錯誤:「你不能叫一個空值的方法表達」。我想這是因爲它缺少$符號,因爲它應該生成以前設置的變量的名稱。

因此,我創建一個新的「我相信動態」變量從以前生成的變量。

輸出I創造新變種 - 數值後想:

$PREVVARNAME.Session.CreateShellStream(xxxxx) 

簡化的I 認爲我想這樣生成的字符串: 「$」 命令GET-VAR的輸出字符串 「會話」

+0

您好,歡迎StackOverflow的一個哈希表。請查看幫助中心([我如何提出一個好問題](https://stackoverflow.com/help/how-to-ask))或參加[tour](https://stackoverflow.com/tour) – Clijsters

+0

請編輯問題並用簡單的英語解釋你想要達到的目標。代碼示例有點奇怪,所以可能有更簡單的方法來獲得期望的結果。 – vonPryz

回答

0

我無權訪問這些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)) 
+0

請理解,我剛剛開始學習使用PowerShell腳本,因此難以跟上一些腳本術語。 這個想法確實建立了多個SSH會話(因爲這對每個服務器來說都是相同的技巧,但是在服務器1上「做些什麼」但服務器2上的「做其他事情」對我來說是非常棘手的,所以對於我需要的每個服務器保持一個會話,我需要能夠訪問該會話來執行操作。 我解釋這個權利嗎? –

+0

非常感謝。 –