2013-07-16 9 views
9

मैं स्क्रिप्ट की शुरुआत में सभी उपयोगकर्ता द्वारा बनाए गए चर को हटाना चाहता हूं।शक्तियां - सभी चर हटाएं

वर्तमान में मैं Remove-Variable -Name * कर रहा हूं लेकिन यह सभी सिस्टम चरों को भी हटाने की कोशिश करता है, जिसके परिणामस्वरूप बहुत सारे त्रुटि संदेश होते हैं।

कोई अन्य तरीका?

+1

क्यूं कर? ऐसा लगता है कि आपकी अंतर्निहित समस्या –

उत्तर

-3

आप नहीं कर सकते। स्क्रिप्ट शुरू होने से पहले आपको उपलब्ध चरों का ट्रैक रखना होगा और स्क्रिप्ट निष्पादित किए जाने के बाद जोड़े गए किसी भी चर को हटा देना होगा।

0

मुझे लगता है कि आप उन सभी चरों की एक सूची बना सकते हैं जिन्हें आप हटाना नहीं चाहते हैं।

$DontDelete = '$','?','^','args',...,'WhatIfPreference' 

फिर वेरिएबल को हटाएं जो सूची हटाएं नहीं हैं।

20

केवल पढ़ने के लिए या निरंतर के बाद से सभी प्रणाली चर रहे हैं वैसे भी तुम सिर्फ त्रुटियों मौन कर सकते हैं:

Remove-Variable * -ErrorAction SilentlyContinue 

लेकिन बेशक, आप शायद वैसे भी कुछ को बाहर रखना चाहिए:

Get-Variable -Exclude PWD,*Preference | Remove-Variable -EA 0 
+0

पर एक बेहतर समाधान है जब आप निकालें-वेरिएबल को व्यवस्थापक के रूप में चलाते हैं, तो यह उन पठनीय चर को भी हटा देगा, इसलिए इसे देखभाल के साथ किया जाना चाहिए, और उचित देखभाल का अर्थ शायद निकालने का उपयोग नहीं करना चाहिए - बिल्कुल भी उपलब्ध है: https://stackoverflow.com/questions/5666863/powershell-ise-cannot-start-after-foolishly-deleting-all-variables?rq=1 – music2myear

+0

@ music2myear: आपका पावरशेल सत्र आपका, व्यवस्थापक या अप्रासंगिक नहीं है। – Joey

1

आप चाहिए उन चर पर भरोसा मत करो। जो कुछ भी घोषित नहीं किया गया था उसका उपयोग नहीं किया जाता है। यदि आपको चीजों को चारों ओर पारित करने की आवश्यकता है, तो पैरामीटर का उपयोग करें।

यदि आप इस सिद्धांत को जारी रखते हैं, तो आप बस अपने उपयोगकर्ता द्वारा निर्मित चर को ओवरराइट करेंगे और इसका उपयोग कभी नहीं किया जाएगा।

0

यहां एक हैक है जो आपके $ प्रोफ़ाइल में बनाए गए सभी को छोड़कर सभी चर हटा देगा। ध्यान दें कि इसे चलाने में कुछ सेकंड लगते हैं, और एक बहुत अच्छा मौका है कि आप अपना अंतिम लक्ष्य अधिक कुशल तरीके से प्राप्त कर सकते हैं। आपकी प्रोफ़ाइल स्क्रिप्ट थूकने वाली लाइनों की संख्या के अनुरूप आपको चयन कथन में "15" समायोजित करना होगा। या आप जीवी (get-variable) से पहली पंक्ति की खोज के लिए इसे संशोधित कर सकते हैं।

$x=powershell -nologo -command "gv|out-string" 
$y=($x|select -skip 15) -split "\s+",2 
$varnames = $(for ($i=0;$i -lt $y.length; $i+=2) { $y[$i]}) 
rv i,x,y 
gv | % {if ($varnames -notcontains $_.name) {rv $_.name -EA 0}} 

चेतावनी: इस Powershell द्वारा बनाई चर नहीं हटेंगे कि एक InitialSessionState कि मॉड्यूल को लोड करता है या स्क्रिप्ट है कि चर बनाने कार्यान्वित निर्दिष्ट होस्ट करता है। हालांकि सामान्य पावरहेल और शक्तियों के लिए आपको इसके बारे में चिंता करने की ज़रूरत नहीं है।

+0

यह इंजीनियर पर लगता है – TravisO

0

इसके बजाय सभी उपयोगकर्ता चर को हटाने की, PowerShell के एक ताजा उदाहरण शुरू:

PS C:\> $x = 10 
PS C:\> $y = 50 
PS C:\> $blah = 'text' 
PS C:\> Write-host $x $y $blah 
10 50 text 
PS C:\> powershell 
Windows PowerShell 
Copyright (C) 2009 Microsoft Corporation. All rights reserved. 

PS C:\> Write-host $x $y $blah 

PS C:\> 

उपयोगकर्ता निर्धारित मान नया उदाहरण में लागू नहीं किया जाएगा।

PS C:\> $bleh = 'blue' 
PS C:\> Write-Host $bleh 
blue 
PS C:\> exit 
PS C:\> Write-host $bleh 

PS C:\> 

आपके चर कॉलिंग इंस्टेंस में वापस नहीं ले जाएंगे, या तो।

आपके पास वास्तव में इसे पूरा करने के तरीके के संदर्भ में कुछ विकल्प हैं।

  1. तुम हमेशा नया उदाहरण अपने आप को, शुरू निश्चित रूप से कर सकते हैं:

    powershell -ExecutionPolicy Unrestricted -File myscript

  2. आप एक अलग लिपि में है कि आदेश सांकेतिक शब्दों में बदलना कर सकता है और उसके बाद ही उस स्क्रिप्ट, और साथ नहीं साथी एक फोन वास्तविक कोड
0

मैं स्क्रिप्ट की शुरुआत में एक सरणी में मौजूदा चर नामों की सूची खींच होगा, तो स्क्रिप्ट के अंत में किसी भी नए जोड़े चर निकालें:

### Start of script (store list of existing variable names) 
 
$ExistingVariables = Get-Variable | Select-Object -ExpandProperty Name 
 

 
<# 
 
Script contents go here 
 
#> 
 

 
### End of script (remove new variables) 
 
$NewVariables = Get-Variable | Select-Object -ExpandProperty Name | Where-Object {$ExistingVariables -notcontains $_ -and $_ -ne "ExistingVariables"} 
 
if ($NewVariables) 
 
    { 
 
    Write-Host "Removing the following variables:`n`n$NewVariables" 
 
    Remove-Variable $NewVariables 
 
    } 
 
else 
 
    { 
 
    Write-Host "No new variables to remove!" 
 
    }

संबंधित मुद्दे