23

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

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

4

5 回答 5

25

你可以做:

if ($host.name -eq 'ConsoleHost') # or -notmatch 'ISE'
{
  .. do something .. 
}
else
{
  .. do something else..
}
于 2012-11-02T12:40:59.313 回答
18

知道这是很久以前问过的,并且已经标记为已回答,但还有另一种方式:

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

于 2014-08-10T01:57:13.447 回答
8

$psISE这是一个在不生成异常的情况下查找存在的方法:

if (Test-Path variable:global:psISE)
{
...
}
于 2017-07-18T12:13:43.583 回答
3

另一种选择...

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

Catch [System.Management.Automation.PSNotSupportedException] {
    # The current PowerShell Host doesn't support transcribing
}
于 2012-11-20T12:48:37.127 回答
1

这些都是很好的答案!这是我使用 $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
于 2019-02-09T21:38:41.347 回答