मेरे पास एक बड़ी बैच स्क्रिप्ट है जो पर्यावरण चर के समूह को सेट करती है। मैं उस बैच स्क्रिप्ट को पावरहेल से कॉल करना चाहता हूं, इस तरह से मैं अपनी स्क्रिप्ट और पावरहेल द्वारा सेट i.e. enviorment चर दोनों के लाभ प्राप्त कर सकता हूं।पावरहेल से बैच स्क्रिप्ट को कैसे कॉल करें?
उत्तर
विचार इस ब्लॉग पोस्ट से आता है: Nothing solves everything – PowerShell and other technologies
यहाँ इस स्क्रिप्ट के अपने संस्करण है। यह एक बैच फ़ाइल (या किसी भी देशी आदेश) कॉल और प्रसारित अपने पर्यावरण:
अद्यतन: बेहतर और इस स्क्रिप्ट के बेहतर परीक्षण किया संस्करण यहाँ है: Invoke-Environment.ps1
<#
.SYNOPSIS
Invokes a command and imports its environment variables.
.DESCRIPTION
It invokes any cmd shell command (normally a configuration batch file) and
imports its environment variables to the calling process. Command output is
discarded completely. It fails if the command exit code is not 0. To ignore
the exit code use the 'call' command.
.PARAMETER Command
Any cmd shell command, normally a configuration batch file.
.EXAMPLE
# Invokes Config.bat in the current directory or the system path
Invoke-Environment Config.bat
.EXAMPLE
# Visual Studio environment: works even if exit code is not 0
Invoke-Environment 'call "%VS100COMNTOOLS%\vsvars32.bat"'
.EXAMPLE
# This command fails if vsvars32.bat exit code is not 0
Invoke-Environment '"%VS100COMNTOOLS%\vsvars32.bat"'
#>
param
(
[Parameter(Mandatory=$true)] [string]
$Command
)
cmd /c "$Command > nul 2>&1 && set" | .{process{
if ($_ -match '^([^=]+)=(.*)') {
[System.Environment]::SetEnvironmentVariable($matches[1], $matches[2])
}
}}
if ($LASTEXITCODE) {
throw "Command '$Command': exit code: $LASTEXITCODE"
}
आप पावरहेल से बस अपना नाम डालकर बैच स्क्रिप्ट चला सकते हैं, लेकिन इससे आपकी मदद नहीं होगी। बैच स्क्रिप्ट में सेट किए गए पर्यावरण चर केवल से दिखाई देंगे जो बैच और बैच चलाता है। एक बार जब नियंत्रण पावरहेल पर वापस आ जाता है तो पर्यावरण चर समाप्त हो जाते हैं। आप अंत में बैच स्क्रिप्ट set
चला सकते हैं और उसके बाद अपने आउटपुट को अपने पीएसएच पर्यावरण चर में पार्स कर सकते हैं।
क्या आपकी बैच स्क्रिप्ट को PowerShell स्क्रिप्ट में परिवर्तित करना संभव है? यदि आप बल्ले फ़ाइल चलाते हैं, तो इसे अलग सत्र में निष्पादित किया जाता है जो PowerShell के env चर को संशोधित नहीं करता है।
आप env चर बहुत आसानी से साथ काम कर सकते हैं:
PS> Get-ChildItem env:
Name Value
---- -----
ALLUSERSPROFILE C:\ProgramData
APPDATA C:\Users\xyz\AppData\Roaming
CommonProgramFiles C:\Program Files (x86)\Common Files
CommonProgramFiles(x86) C:\Program Files (x86)\Common Files
CommonProgramW6432 C:\Program Files\Common Files
COMPUTERNAME xyz
ComSpec C:\Windows\system32\cmd.exe
DXSDK_DIR D:\prgs\dev\Microsoft DirectX SDK (August 2009)\
FP_NO_HOST_CHECK NO
HOMEDRIVE Z:
HOMEPATH \
...
PS> Get-Item env:path
Name Value
---- -----
Path c:\dev\CollabNet\SubversionClient;C:\Windows\system32;...
या यहां तक कि (बहुत कम, केवल स्ट्रिंग रिटर्न):
PS> $env:path
c:\dev\CollabNet\Subversion Client;C:\Windows\system32;...
आप इस तरह पर्यावरण पथ बदल सकते हैं:
PS> $env:path += ";c:\mydir"
और आप मशीन स्तर पर पर्यावरण चर सेट भी कर सकते हैं:
# fist arg = env variable name, second = value, third = level, available are 'Process', 'User', 'Machine'
PS> [Environment]::SetEnvironmentVariable('test', 'value', 'machine')
आप PowerShell Community Extensions हड़पने है, वहाँ उस में एक आह्वान-BatchFile आदेश है कि बैच फ़ाइल चलाता है, लेकिन अधिक महत्वपूर्ण बात, यह किसी भी वातावरण चर बैच द्वारा किए गए संशोधन को बरकरार रखे हुए है: यहाँ PowerShell के लिए इसी तरह की क्षमता जोड़ने के लिए प्रस्ताव है फ़ाइल उदाहरण:
>Invoke-BatchFile 'C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat'
Setting environment for using Microsoft Visual Studio 2008 x86 tools.
बहुत अच्छा, मुझे स्रोत में देखना होगा :) – stej
नीचे दिए गए अनुसार, 1. कोडप्लेक्स पर ज़िप फ़ाइल से स्थापित करने के लिए, दाएं -क्लिक और एक मोडल बटन, "अनब्लॉक" प्रकट होता है; इसे क्लिक करें। 2. अनब्लॉक करने के बाद अनजिप करें और फिर $ PSHome \ Modules के अनुसार फ़ोल्डर को अपने मॉड्यूल स्थान में रखें। http://stam.blogs.com/8bits/2010/06/installing-powershell-community-extensions.html – AnneTheAgile
- 1. पावरहेल स्क्रिप्ट फंस जाती है, बैच फ़ाइल
- 2. पावरहेल या बैच
- 3. पावरहेल में बैच स्क्रिप्ट को कॉल करते समय मैं बराबर चिह्न कैसे पास करूं?
- 4. कैसे बैच स्क्रिप्ट
- 5. पावरहेल स्क्रिप्ट को बढ़ाएं
- 6. विंडोज बैच फ़ाइल से कॉलिंग पावरहेल cmdlets
- 7. पावरहेल स्क्रिप्ट
- 8. बैच फ़ाइल/पावरहेल स्क्रिप्ट निष्पादित करके प्लेबैक डिवाइस सेट करना
- 9. बैच स्क्रिप्ट
- 10. बैच स्क्रिप्ट
- 11. बैच स्क्रिप्ट
- 12. बैच स्क्रिप्ट
- 13. पावरहेल पॉवर्सहेल स्क्रिप्ट
- 14. बैच स्क्रिप्ट
- 15. बैच स्क्रिप्ट
- 16. मैं बैच स्क्रिप्ट के भीतर से बैच स्क्रिप्ट कैसे चला सकता हूं?
- 17. रिक्त स्थान वाले पैरामीटर वाले किसी अन्य बैच फ़ाइल से बैच फ़ाइल को कैसे कॉल करें?
- 18. पायथन स्क्रिप्ट से निष्पादन योग्य को कॉल कैसे करें?
- 19. तर्कों के साथ बैच फ़ाइल को कॉल करने के लिए पावरहेल के इनवोक-कमांड का उपयोग
- 20. विंडोज बैच स्क्रिप्ट
- 21. बैच-कॉपी-स्क्रिप्ट
- 22. PowerShell स्क्रिप्ट से T4 टेम्पलेट को ट्रिगर कैसे करें
- 23. एक बैच स्क्रिप्ट
- 24. विंडोज बैच स्क्रिप्ट वायरस
- 25. आईटी कार्य: एफ # स्क्रिप्ट बनाम पावरहेल स्क्रिप्ट
- 26. विंडोज बैच स्क्रिप्ट
- 27. विंडोज बैच स्क्रिप्ट
- 28. पावरहेल - स्क्रिप्ट को आमंत्रित करने वाले उपयोगकर्ता को ढूंढें
- 29. विंडोज़ लॉगिन विंडो से पहले बैच स्क्रिप्ट लॉन्च करें
- 30. किसी अन्य SQL स्क्रिप्ट के भीतर से SQL स्क्रिप्ट को कैसे कॉल करें?
आप $ $ कमांड> नल 2> और 1 && सेट 'का उपयोग करना चाहते हैं, बस' $ कमांड 'में गैर-शून्य निकास कोड है लेकिन फिर भी पर्यावरण को बदलता है। – Joey
जुड़ा हुआ 'बेहतर और बेहतर परीक्षण' संस्करण मेरे लिए काम नहीं करता है, लेकिन इस उत्तर से लिपि चिपकाने की प्रतिलिपि बनाई गई है। –
अलार्म के लिए धन्यवाद। क्या आप कोई समस्या बना सकते हैं [वहां] (https://github.com/nightroman/PowerShelf/issues) और अपने उपयोग के मामले का वर्णन करें? –