我在一台机器的$pshome/profile.ps1文件里定义了一些function,在这台机器上通过powershell访问正常,可是当我从另一台机器远程登录这个机器的powershell后,在远程访问这个命令就提示找不到,完整错误信息为:
[10.30.147.30]: PS P:\Users\administrator\Documents> get-configsite
The term ‘get-configsite’ is not recognized as the name of a cmdlet, function, script file, or oper
able program. Check the spelling of the name, or if a path was included, verify that the path is co
rrect and try again.
+ CategoryInfo :
+ FullyQualifiedErrorId : CommandNotFoundException
想问下是因为远程登录的时候不会加载profile.ps1文件吗?该如何解决这个问题?谢谢。
默认profile是不能被远程回话加载的。
你可以在server 端注册一个PSSessionConfiguration
Register-PSSessionConfiguration -Name 'withmyProfile' -StartupScript 'd:\youProfile.ps1'
在client端,远程连接时指定configuration,即可。
New-PSSession -ComputerName pstips.net -ConfigurationName withmyProfile
答案补充:
测试环境:
远程机器:windows 7
本地机器:windows 8.1
在远程机器上查看,当前远程会话配置:
PS> Get-PSSessionConfiguration Name PSVersion StartupScript Permission ---- --------- ------------- ---------- microsoft.powershell 2.0 BUILTIN\Administrators AccessAll... Microsoft.PowerShell32 2.0
我的是64位机器,所以默认配置为第一个:
尝试设置:
PS> Set-PSSessionConfiguration -Name 'microsoft.powershell' -StartupScript "$pshome\profile.ps1" 确认 是否确实要执行此操作? 对目标“名称: microsoft.powershell”执行操作“Set-PSSessionConfiguration”。 [Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 挂起(S) [?] 帮助 (默认值为“Y”): y WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Plugin\microsoft.powershell\InitializationParameters ParamName ParamValue --------- ---------- startupscript C:\Windows\System... 确认 是否确实要执行此操作? 对目标“名称: WinRM”执行操作“"Restart-Service"”。 [Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 挂起(S) [?] 帮助 (默认值为“Y”): y 警告: 正在等待服务“Windows Remote Management (WS-Management) (winrm)”完成停止...
查看配置:
PS> Get-PSSessionConfiguration -Name 'microsoft.powershell' | select -ExpandProperty StartupScript C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
配置正确。
接下来在profile.ps1文件中输入:
$test='variable in pshome\profile.ps1'
接下来在客户端机器上验证设置是否会生效:
PS> Enter-PSSession -ComputerName 'home-win7' -Credential mosser [home-win7]: PS C:\Users\mosser\Documents> $test variable in pshome\profile.ps1
变量已经默认被加载了,说明配置成功。
我在网上搜索了,说远程会话会加载$pshome下的profile文件,这个也不会加载的吗?你说的方法我也在网上找到了,我的需求是在连接的时候不用指定configurationName的,能有办法做到吗,也就是说让他默认都自动加载。我在远程电脑上试了另一种方法,就是把放在profile.ps1里的function都单独做成一个一个的.ps1文件,文件名就为function的名字,然后放到system32下面,这样做可以访问,不过就是会有很多重复的代码,而且还不能覆盖系统提供的get-childitem这个命令。不知道有没有什么解决办法?
刚才又在网上搜到可以通过设置 $PSSessionConfigurationName来设置default session configuration,然后我在电脑里设置了值为$pshome+’\profile.ps1’,可是我在远程启了powershell之后发现profile.ps1并没有被加载。而只有我显示的像你说的那样注册一个configuration name才可以,是我哪里没有设置对吗?原文链接为:http://technet.microsoft.com/zh-cn/library/hh849741(v=wps.620).aspx
估计你没有配置正确,请看上面的答案补充。
已经可以了,非常感谢。也同时谢谢strikene的回复。