PowerShell 在调用另一个脚本时忽略配置文件脚本

PowerShell ignore profile script when calling another script

这让我绞尽脑汁。我有一个用于准备系统的配置文件脚本,效果很好。现在的问题是,我正在使用的系统由一家公司管理,他们正在推送用于系统验证和修复的脚本,就像普通公司所做的那样,但是,无论他们使用什么工具来做到这一点,它都不会调用 -noprofile PowerShell 中的命令。所以我发现每次他们在我的用户上下文中调用脚本时,它都会先运行我的 Microsoft.PowerShell_profile.ps1 ....这真的很烦人。我还没有联系服务台说“嘿,你能改变你的流程吗,因为它让我的系统这样做......?”

有没有一种方法可以在我的配置文件脚本中编写如下内容:

If($MyInvocation.MyCommand.ToString() -ne 'Microsoft.PowerShell_profile.ps1'){
    Break
}

我发现这不起作用。如果调用 PowerShell 命令:

powershell -file d:\Scripts\testscript.ps1

如何从配置文件脚本中检测文件名调用。我可以在测试脚本中检测到它。ps1 使用这些变量中的任何一个:

'$MyInvocation.InvocationName:' + $MyInvocation.InvocationName
'$MyInvocation.MyCommand: ' + $MyInvocation.MyCommand
'$MyInvocation.MyCommand.Name: ' + $MyInvocation.MyCommand.Name
'$MyInvocation.MyCommand.Path: ' + $MyInvocation.MyCommand.Path
'$PSCommandPath: ' + $PSCommandPath
'$PSScriptRoot :' + $PSScriptRoot

我问的是不可能的事吗?

在您的 $PROFILE 文件中进行区分的一种简单方法是测试是否有任何参数在启动时传递给 PowerShell 可执行文件:

if ([Environment]::GetCommandLineArgs().Count -gt 1) { exit }

注意:始终至少有 一个 参数,即 可执行文件 本身。

如果您的 interactive 会话有可能以参数开始,则您必须更具体地检查 [Environment]::GetCommandLineArgs() 数组。