有没有办法检查脚本是否由PowerShell ISE运行?

时间:2012-11-02 12:37:33

标签: .net powershell powershell-v3.0

如果PowerShell脚本由Powersehll ISE运行,我想跳过Start-Transcript,Stop-Transcript行。

这可能吗?我怎样才能做到这一点?

5 个答案:

答案 0 :(得分:19)

你可以这样做:

if ($host.name -eq 'ConsoleHost') # or -notmatch 'ISE'
{
  .. do something .. 
}
else
{
  .. do something else..
}

答案 1 :(得分:13)

知道这是在不久前被问到的,已经标记为已回答,但还有一个方法:

function Test-IsISE {
# try...catch accounts for:
# Set-StrictMode -Version latest
    try {    
        return $psISE -ne $null;
    }
    catch {
        return $false;
    }
}

$ psise在ISE中可用:

http://technet.microsoft.com/en-us/library/dd819500.aspx

答案 2 :(得分:5)

这是一种查找$psISE的存在而不产生例外的方法:

if (Test-Path variable:global:psISE)
{
...
}

答案 3 :(得分:3)

另一种选择......

Try {
    Start-Transcript -Path <somepath> | Out-Null
}

Catch [System.Management.Automation.PSNotSupportedException] {
    # The current PowerShell Host doesn't support transcribing
}

答案 4 :(得分:0)

这些是很好的答案!这是我使用$ host.name

的方法

我需要一种方法:

在我的脚本中使用ReadKey(在ISE中将不起作用),但仍能够在Powershell ISE中使用(并运行)脚本。 有一种方法让脚本知道它是在控制台中还是在ISE中,并分别激活ReadKey或Read-Host。

这是代码:

IF ($host.name -eq 'Windows Powershell ISE Host') {$K = Read-Host "Please make your choice"} #Used when you are in ISE.  Will necessitate an ENTER Key.
IF ($host.name -eq 'ConsoleHost') {$KeyPress = [System.Console]::ReadKey();$K = $KeyPress.Key} #Used when running in Console. This will NOT necessitate an ENTER Key. BUT, it ## will NOT work ## in ISE