PowerShell
वस्तुओं के साथ काम करना
खोज…
वस्तुओं को अद्यतन करना
गुण जोड़ना
यदि आप किसी मौजूदा ऑब्जेक्ट में गुण जोड़ना चाहते हैं, तो आप ऐड-मेंबर cmdlet का उपयोग कर सकते हैं। PSObjects के साथ, मान एक प्रकार के "नोट गुण" में रखे जाते हैं
$object = New-Object -TypeName PSObject -Property @{
Name = $env:username
ID = 12
Address = $null
}
Add-Member -InputObject $object -Name "SomeNewProp" -Value "A value" -MemberType NoteProperty
# Returns
PS> $Object
Name ID Address SomeNewProp
---- -- ------- -----------
nem 12 A value
आप Select-Object Cmdlet (तथाकथित गणना गुण) के साथ गुण भी जोड़ सकते हैं:
$newObject = $Object | Select-Object *, @{label='SomeOtherProp'; expression={'Another value'}}
# Returns
PS> $newObject
Name ID Address SomeNewProp SomeOtherProp
---- -- ------- ----------- -------------
nem 12 A value Another value
ऊपर दिए गए आदेश को इस तक छोटा किया जा सकता है:
$newObject = $Object | Select *,@{l='SomeOtherProp';e={'Another value'}}
गुणों को दूर करने वाला
आप किसी ऑब्जेक्ट से गुण हटाने के लिए Select-Object Cmdlet का उपयोग कर सकते हैं:
$object = $newObject | Select-Object * -ExcludeProperty ID, Address
# Returns
PS> $object
Name SomeNewProp SomeOtherProp
---- ----------- -------------
nem A value Another value
एक नई वस्तु बनाना
PowerShell, कुछ अन्य स्क्रिप्टिंग भाषाओं के विपरीत, पाइपलाइन के माध्यम से ऑब्जेक्ट भेजता है। इसका मतलब यह है कि जब आप एक कमांड से दूसरे में डेटा भेजते हैं, तो वस्तुओं को बनाने, संशोधित करने और एकत्र करने में सक्षम होना आवश्यक है।
एक वस्तु बनाना सरल है। आपके द्वारा बनाई गई अधिकांश ऑब्जेक्ट्स PowerShell में कस्टम ऑब्जेक्ट होंगे, और उस के लिए उपयोग करने का प्रकार PSObject है। PowerShell आपको किसी भी ऑब्जेक्ट को बनाने की अनुमति देगा जो आप .NET में बना सकते हैं।
यहाँ कुछ गुणों के साथ एक नई वस्तु बनाने का एक उदाहरण दिया गया है:
विकल्प 1: नई वस्तु
$newObject = New-Object -TypeName PSObject -Property @{
Name = $env:username
ID = 12
Address = $null
}
# Returns
PS> $newObject
Name ID Address
---- -- -------
nem 12
आप $newObject =
साथ कमांड को $newObject =
करके एक वैरिएबल में स्टोर कर सकते हैं
आपको वस्तुओं के संग्रह को संग्रहीत करने की भी आवश्यकता हो सकती है। यह एक खाली संग्रह चर बनाकर और वस्तुओं को संग्रह में जोड़कर किया जा सकता है, जैसे:
$newCollection = @()
$newCollection += New-Object -TypeName PSObject -Property @{
Name = $env:username
ID = 12
Address = $null
}
फिर आप इस संग्रह वस्तु के माध्यम से वस्तु द्वारा पुनरावृति करना चाह सकते हैं। ऐसा करने के लिए, दस्तावेज़ में लूप अनुभाग ढूंढें।
विकल्प 2: चयन-वस्तु
ऑब्जेक्ट बनाने का एक कम सामान्य तरीका जो आपको अभी भी इंटरनेट पर मिलेगा वह निम्नलिखित है:
$newObject = 'unuseddummy' | Select-Object -Property Name, ID, Address
$newObject.Name = $env:username
$newObject.ID = 12
# Returns
PS> $newObject
Name ID Address
---- -- -------
nem 12
विकल्प 3: pscustomobject प्रकार त्वरक (PSv3 + आवश्यक)
ऑर्डर किए गए टाइप एक्सीलरेटर पॉवरशेल को हमारे गुणों को उस क्रम में रखने के लिए मजबूर करते हैं जो हमने उन्हें परिभाषित किया था। [PSCustomObject]
का उपयोग करने के लिए आपको ऑर्डर किए गए एक्सीलरेटर की आवश्यकता नहीं है:
$newObject = [PSCustomObject][Ordered]@{
Name = $env:Username
ID = 12
Address = $null
}
# Returns
PS> $newObject
Name ID Address
---- -- -------
nem 12
किसी वस्तु का परीक्षण करना
अब जब आपके पास एक वस्तु है, तो यह पता लगाना अच्छा हो सकता है कि यह क्या है। आप Get-Member cmdlet का उपयोग करके देख सकते हैं कि कोई वस्तु क्या है और उसमें क्या है:
Get-Item c:\windows | Get-Member
यह प्रदान करता है:
TypeName: System.IO.DirectoryInfo
ऑब्जेक्ट की विधियों और विधियों की एक सूची के अनुसार।
ऑब्जेक्ट का प्रकार प्राप्त करने का एक और तरीका गेट टाइप विधि का उपयोग करना है, जैसे:
C:\> $Object = Get-Item C:\Windows
C:\> $Object.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True DirectoryInfo System.IO.FileSystemInfo
उन संपत्तियों की एक सूची देखने के लिए, जो उनके मूल्यों के साथ हैं, आप उनके संपत्ति पैरामीटर के साथ प्रारूप-सूची cmdlet का उपयोग कर सकते हैं: * (सभी का अर्थ)।
यहाँ एक उदाहरण है, जिसके परिणामस्वरूप आउटपुट:
C:\> Get-Item C:\Windows | Format-List -Property *
PSPath : Microsoft.PowerShell.Core\FileSystem::C:\Windows
PSParentPath : Microsoft.PowerShell.Core\FileSystem::C:\
PSChildName : Windows
PSDrive : C
PSProvider : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : True
Mode : d-----
BaseName : Windows
Target : {}
LinkType :
Name : Windows
Parent :
Exists : True
Root : C:\
FullName : C:\Windows
Extension :
CreationTime : 30/10/2015 06:28:30
CreationTimeUtc : 30/10/2015 06:28:30
LastAccessTime : 16/08/2016 17:32:04
LastAccessTimeUtc : 16/08/2016 16:32:04
LastWriteTime : 16/08/2016 17:32:04
LastWriteTimeUtc : 16/08/2016 16:32:04
Attributes : Directory
सामान्य वर्गों के उदाहरण बनाना
नोट: PowerShell 5.1 के लिए लिखे गए उदाहरण आप जेनेरिक कक्षाओं के उदाहरण बना सकते हैं
#Nullable System.DateTime
[Nullable[datetime]]$nullableDate = Get-Date -Year 2012
$nullableDate
$nullableDate.GetType().FullName
$nullableDate = $null
$nullableDate
#Normal System.DateTime
[datetime]$aDate = Get-Date -Year 2013
$aDate
$aDate.GetType().FullName
$aDate = $null #Throws exception when PowerShell attempts to convert null to
आउटपुट देता है:
Saturday, 4 August 2012 08:53:02
System.DateTime
Sunday, 4 August 2013 08:53:02
System.DateTime
Cannot convert null to type "System.DateTime".
At line:14 char:1
+ $aDate = $null
+ ~~~~~~~~~~~~~~
+ CategoryInfo : MetadataError: (:) [], ArgumentTransformationMetadataException
+ FullyQualifiedErrorId : RuntimeException
जेनेरिक कलेक्शन भी संभव है
[System.Collections.Generic.SortedDictionary[int, String]]$dict = [System.Collections.Generic.SortedDictionary[int, String]]::new()
$dict.GetType().FullName
$dict.Add(1, 'a')
$dict.Add(2, 'b')
$dict.Add(3, 'c')
$dict.Add('4', 'd') #powershell auto converts '4' to 4
$dict.Add('5.1', 'c') #powershell auto converts '5.1' to 5
$dict
$dict.Add('z', 'z') #powershell can't convert 'z' to System.Int32 so it throws an error
आउटपुट देता है:
System.Collections.Generic.SortedDictionary`2[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
Key Value
--- -----
1 a
2 b
3 c
4 d
5 c
Cannot convert argument "key", with value: "z", for "Add" to type "System.Int32": "Cannot convert value "z" to type "System.Int32". Error: "Input string was not in a correct format.""
At line:15 char:1
+ $dict.Add('z', 'z') #powershell can't convert 'z' to System.Int32 so ...
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument