2017-10-16 9 views
0

Je suis assez nouveau pour PowerShell et j'essaie de faire quelque chose comme ceci:Comment puis-je accéder aux méthodes de variables créées dynamiquement?

$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)) 

MON PROBLÈME:

Lors de la dernière commande, je reçois l'erreur « Vous ne pouvez pas appeler une méthode sur une valeur NULL expression". Je suppose que c'est parce qu'il manque le signe $ car il devrait générer le nom de la variable précédemment définie. Donc, je crée une nouvelle variable "Je crois dynamique" à partir d'une variable précédemment générée.

sortie Je veux après la création de nouvelles var -Value:

$PREVVARNAME.Session.CreateShellStream(xxxxx) 

simplifiée Je pense Je veux une chaîne générée comme ceci: "$" sortie de la commande GET-VAR en tant que chaîne "session"

+0

Bonjour et bienvenue à StackOverflow. Veuillez jeter un coup d'oeil au centre d'aide ([Comment poser une bonne question] (https://stackoverflow.com/help/how-to-ask)) ou prendre le [tour] (https://stackoverflow.com/tour) – Clijsters

+0

Veuillez éditer la question et expliquer en anglais ce que vous essayez d'accomplir. L'exemple de code est un peu étrange, il y a donc probablement beaucoup plus simple d'obtenir le résultat souhaité. – vonPryz

Répondre

0

Je n'ai pas accès à ces cmdlets mais il semble que vous essayez simplement de créer des variables dynamiques et d'utiliser des méthodes associées.

Tout d'abord, capturons simplement la sortie de la première variable dynamique et sauvegardons-la.

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

Alors maintenant $serversession serait un System.Management.Automation.PSVariable qui au moins aurait une propriété de nom et la valeur.

Maintenant, nous pouvons utiliser la valeur de $serversession pour effectuer notre prochaine opération

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

Ce devrait le faire.

Personnellement, je remettrais en question le besoin de variables dynamiques ici. Si vous envisagez d'avoir plusieurs sessions simultanées peut-être ..... mais il y a plusieurs façons de gérer cela.

Comme un Hashtable par exemple

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

S'il vous plaît comprendre que je viens de commencer à apprendre les scripts avec PowerShell donc j'ai du mal à suivre un jargon de script. L'idée est en effet de construire plusieurs sessions SSH (parce que c'est la même astuce pour chaque serveur mais "faire quelque chose" sur le serveur 1 mais "faire autre chose" sur le serveur 2 est difficile pour moi. maintenir une session et je dois pouvoir accéder à cette session pour effectuer des actions Est-ce que je l'explique bien? –

+0

Merci beaucoup. –