gpt4 book ai didi

PowerShell 远程 session 和范围问题 : Commands appear to run locally

转载 作者:行者123 更新时间:2023-12-04 22:03:43 26 4
gpt4 key购买 nike

下面是一个示例脚本,它尝试在服务器上创建远程 session ,然后使用 WMI 获取服务器 IIS 应用程序池的列表,并列出它们的名称:

    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
}
}

此函数包含在名为“Test-Remoting.ps1”的文件中。我打开 PowerShell,CD 进入包含此文件的目录,点源文件,然后调用函数:

PS C:\Users\moskie> . .\Test-Remoting.ps1
PS C:\Users\moskie> Test-Remoting

但此脚本的结果是我的本地 机器上的应用程序池列表,不是 TestServer。

或者,如果我在 PowerShell 提示符下手动运行以下行(与函数中的行相同),我获取远程服务器上的应用程序池列表:

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:\>

关于 PowerShell 远程处理和作用域,我认为有一个概念我没有注意到。任何人都可以帮助解释这种行为吗?

最佳答案

我相信 Enter/Exit-PSSession 意味着更多的交互使用。来自 Enter-PSSession 帮助:

SYNOPSIS
Starts an interactive session with a remote computer.

在脚本中,像这样使用 New-PSSession 和 Invoke-Command:

$session = New-PSSession server01
Invoke-Command -Session $session {hostname}
Remove-PSSession -Session $session

更新:要远程执行完整的脚本,请使用 Invoke-Command 上的 FilePath 参数:

icm server01 -FilePath C:\users\keith\myscript.ps1 -arg 1,2

这会将脚本复制到远程计算机 server01 并在那里使用提供的参数执行它。

关于PowerShell 远程 session 和范围问题 : Commands appear to run locally,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2196343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com