2009-09-02 65 views
2

批處理腳本可以知道它是否從PowerShell調用(沒有額外的參數feeded)嗎?批處理腳本可以知道它是否從PowerShell中調用?

需要這樣的東西..

if (%THIS_BATCH_CALLED_FROM_POWERSHELL%) 
    ... warn the user or drop back to powershell to execute the proper instructions... 

問題與this question - virtualenv-in-powershell有關。

+0

我不確定我是否理解這個問題。批處理文件不是從PowerShell直接執行的。在PowerShell中執行批處理文件時,會生成一個新的cmd.exe實例來執行批處理文件的實際執行。 – 2009-09-02 21:26:13

+0

我想他想找到一種在Powershell環境中更改環境變量的方法。 – JasonTrue 2009-09-02 21:36:11

+0

@凱斯希爾:沒錯。我正在尋找一種方法來從批處理腳本中知道是否從PS中調用它。 – 2009-09-02 22:51:52

回答

3

您可以使用像「tlist.exe/t」或this one這樣的工具來顯示當前進程和所有父進程的PID。您可以檢查每個PID以查看是否有任何對應的PowerShell.exe。

+0

這是一種醜陋的方式,但至少可以完成這項工作。謝謝基思。 – 2009-09-03 20:39:49

0

您可以在腳本中添加一個默認警告並傳遞一個標誌,告訴它不要顯示警告。當你從power shell中調用它時,會傳遞該標誌。

+0

意圖是沒有國旗這樣做。謝謝。 – 2009-09-03 20:39:05

0

在我的Powershell環境(PS 2.0 CTP)中,我似乎有一個環境變量PSMODULEPATH,它不是由普通的命令行環境設置的,但當Powershell有一個子CMD.exe外殼時仍然存在。

我想你可能能夠「足夠可靠地」檢查批處理腳本中是否存在PSMODULEPATH。

+0

你確定嗎? %PSMODULEPATH%似乎是全球環境。設置,因此也存在於我的機器上的cmd.exe外殼上。 – 2009-09-02 19:27:53

+0

不確定,因爲我只有我的機器來檢查,但是當我從資源管理器運行「CMD.exe」時,它不存在。當我運行Powershell時,它確實存在。當我從Powershell運行cmd.exe時,環境會被複制到新的cmd.exe中,並在那裏存在。 – JasonTrue 2009-09-02 19:49:39

+2

%PSMODULEPATH%是我在Win7上的全局env變量。 – 2009-09-02 21:14:05

相關問題