相当于 $profile 脚本的 Enter-PSSession

Enter-PSSession equivalent of $profile script

在我的本地 PC 和本地我管理的服务器上,我经常使用 $profile 脚本来 set/output 基本信息。例如 运行ning Set-Location 将当前路径设置为包含脚本的文件夹,也许还有一些 Write-Host 条目显示最常用脚本及其预期参数的基本作弊 sheet .

有谁知道在使用 Enter-PSSession 与远程服务器交互连接时做类似事情的方法吗?

据我所知,远程会话没有可用的 $profile 文件,所以我不能只在其中添加命令(并且在本地服务器上交互使用的 $profile 不会被调用你远程进入同一台服务器)。

在本地,我已将功能添加到我的本地配置文件中,以便更快地连接到特定服务器,例如:

function foo{
   $host.ui.RawUI.WindowTitle = "Foo"
   Enter-PSSession -computername foo.local.mydomain.com -authentication credssp -credential mydomain\adminuser
}

这对连接我来说工作正常(例如,我输入 foo,然后输入我的密码,然后我就进去了),但我仍然被扔到 C:\Users\adminuser\Documents.

我尝试在连接后向函数中添加诸如 Set-Location 命令之类的东西,但是在本地上下文(文件夹不存在)中得到 运行 然后它连接到服务器。我什至尝试将命令通过管道传递给 Enter-PSSession,但不出所料,这也不起作用。

显然,像 Invoke-Command 这样的东西允许我在连接后向 运行 指定命令,但这不会(据我所知)给我留下一个交互式会话,这是主要的目标。

Enter-PSSession 将您的主机连接到远程会话后,您无法真正自动执行任何发生的事情 - 但您可以执行所有您想要的代码在远程会话 before 调用 Enter-PSSession:

function DumpMeInto {
  param([string]$Path)

  # Create remote session (you'll be prompted for credentials at this point)
  $session = New-PSSession -ComputerName foo.local.mydomain.com -Authentication credssp -Credential mydomain\adminuser

  # Run Set-Location in remote runspace
  Invoke-Command -Session $session -ScriptBlock { Set-Location $args[0] } -ArgumentList $Path

  # ... and then enter the session 
  Enter-PSSession -Session $session
}

现在您可以执行 DumpMeInto C:\temp 并且它应该将您带到 foo.local.mydomain.com 上的远程会话,其工作目录设置为 c:\temp