Voici un exemple de script qui tente de créer une session à distance sur un serveur, puis utilise WMI pour obtenir une liste des pools d'applications IIS du serveur et répertorie leurs noms:Sessions PowerShell Remote et question d'étendue: Les commandes semblent s'exécuter localement
function Test-Remoting
{
[CmdletBinding()]
param
(
)
begin
{
Enter-PSSession TestServer
$appPools = Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsApplicationPool" -Authentication 6
$appPools | ForEach-Object {
$appPool = $_;
$appPool.Name
}
Exit-PSSession
}
}
Cette fonction est contenue dans un fichier appelé "Test-Remoting.ps1". J'ouvre PowerShell, CD dans le répertoire contenant ce fichier, point source du fichier et appeler la fonction:
PS C:\Users\moskie> . .\Test-Remoting.ps1
PS C:\Users\moskie> Test-Remoting
Mais le résultat de ce script est une liste des pools d'applications sur mon locale machine, et pas TestServer.
Sinon, si je lance les lignes suivantes (identiques à ceux de la fonction) manuellement à l'invite PowerShell, je faire obtenir la liste des pools d'applications sur le serveur distant:
PS C:\Users\moskie> Enter-PSSession TestServer
[TestServer]: PS C:\> $appPools = Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsApplicationPool" -Authentication 6
[TestServer]: PS C:\> $appPools | ForEach-Object { $appPool = $_; $appPools.Name }
<a list of the names of the application pools on TestServer>
[TestServer]: PS C:\>
I pense qu'il y a un concept que je suis inconscient, en ce qui concerne PowerShell remoting et la portée. Quelqu'un peut-il aider à expliquer ce comportement?
Je vais tenter le coup, mais j'aimerais éviter une telle solution, car le script que je cherche à exécuter est très impliqué. Ce serait une douleur d'avoir à exécuter chaque commande à travers Invoke-Command. Utiliser Entrée/Sortie-PSSession serait le plus pratique, parce que je devrais juste entourer mon script avec ces commandes. – Moskie
S'il s'agit d'un script, vous pouvez le faire 'Invoke-Command -FilePath myscript.ps1' et PowerShell va déplacer le fichier vers la machine distante et l'exécuter ici. –
Merci, j'ai fini par suivre cette route, donc je vais marquer le vôtre comme la réponse. Mais cette notion de session "interactive" est un peu nébuleuse ... il me semblerait logique que quand j'ai un script exécuter une commande pour entrer une nouvelle session, que les commandes qui la suivent soient exécutées dans cette nouvelle session . Devinez pas ... merci encore! – Moskie