د PowerShell ژباړونکي کړکۍ کې د کمانډونو متن محصول یوازې یوه لاره ده چې معلومات په داسې شکل کې ښکاره کړي چې د انسان لید لپاره مناسب وي. په حقیقت کې چهارشنبه
فهرست:
په PowerShell کې شیان
راځئ چې یادونه وکړو چې یو اعتراض د ډیټا ساحو (ملکیتونه، پیښې، او نور) او د دوی د پروسس کولو میتودونو (طریقو) مجموعه ده. د دې جوړښت د یو ډول لخوا مشخص شوی، کوم چې معمولا د متحد .NET کور پلیټ فارم کې کارول شوي ټولګیو پراساس وي. دا هم امکان لري چې د COM، CIM (WMI) او ADSI شیانو سره کار وکړئ. پراپرټیو او میتودونو ته اړتیا ده چې په ډیټا کې مختلفې کړنې ترسره کړي؛ سربیره پردې، په PowerShell کې، شیان د فنکشنونو او cmdlets لپاره د دلیلونو په توګه لیږدول کیدی شي، د دوی ارزښتونه متغیرونو ته وټاکي، او دا هم شتون لري.
د شیانو جوړښت لیدل
د مثال په توګه، راځئ چې د Get-Process cmdlet پرمخ بوځو، کوم چې تاسو ته اجازه درکوي په سیسټم کې د پروسو په اړه معلومات ترلاسه کړئ:
دا به ځینې فارمیټ شوي متن ډیټا ښکاره کړي چې د بیرته راستنیدونکو توکو ملکیتونو او د دوی میتودونو په اړه هیڅ نظر نه ورکوي. د محصول ښه کولو لپاره، موږ اړتیا لرو چې زده کړو چې څنګه د شیانو جوړښت معاینه کړو، او د Get-Member cmdlet به موږ سره پدې کې مرسته وکړي:
Get-Process | Get-Member
دلته موږ لا دمخه ډول او جوړښت ګورو، او د اضافي پیرامیټونو په مرسته موږ کولی شو، د بیلګې په توګه، یوازې د هغه څیز ځانګړتیاوې وښایه چې په داخل کې شامل دي:
Get-Process | Get-Member -MemberType Property
دا پوهه به د ادارې ستونزې په متقابل ډول حل کولو یا خپل سکریپټ لیکلو لپاره اړین وي: د مثال په توګه ، د ځواب ورکونې ملکیت په کارولو سره د ځړولو پروسو په اړه معلومات ترلاسه کول.
د شیانو فلټر کول
PowerShell هغه شیانو ته اجازه ورکوي چې یو ټاکلی شرط پوره کوي د پایپ لاین له لارې تیریږي:
Where-Object { блок сценария }
په قوس کې د سکریپټ بلاک اجرا کولو پایله باید د بولین ارزښت وي. که دا ریښتیا وي ($ ریښتیا)، هغه څیز چې چیرته-آبجیکٹ cmdlet ته داخلیږي د پایپ لاین په اوږدو کې تیریږي، که نه نو ($false) به حذف شي. د مثال په توګه، راځئ چې د بند شوي وینډوز سرور خدماتو لیست ښکاره کړو، د بیلګې په توګه. هغه کسان چې د حالت ملکیت "دریدل" ته ټاکل شوی:
Get-Service | Where-Object {$_.Status -eq "Stopped"}
دلته یوځل بیا موږ متني نمایش وګورو ، مګر که تاسو غواړئ د پایپ لاین څخه تیریږي د شیانو ډول او داخلي جوړښت پوه شئ دا ستونزمنه نه ده:
Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member
د شیانو ترتیب کول
کله چې د شیانو پایپ لاین پروسس کیږي ، ډیری وختونه د دوی ترتیب کولو ته اړتیا وي. د Sort-Object cmdlet د ملکیتونو نومونه (د ترتیب کولو کیلي) لیږدول کیږي او هغه شیان بیرته راګرځوي چې د دوی د ارزښتونو له مخې ترتیب شوي. د CPU وخت مصرف (cpu ملکیت) لخوا د چلولو پروسو محصول ترتیب کول اسانه دي:
Get-Process | Sort-Object –Property cpu
د -Property پیرامیټر له مینځه وړل کیدی شي کله چې Sort-Object cmdlet ته زنګ ووهئ؛ دا د ډیفالټ لخوا کارول کیږي. د ریورس ترتیب کولو لپاره، د -Descending پیرامیټر وکاروئ:
Get-Process | Sort-Object cpu -Descending
د شیانو او د هغوی برخې غوره کول
د Select-Object cmdlet تاسو ته اجازه درکوي د پایپ لاین په پیل یا پای کې د -First یا -Last پیرامیټونو په کارولو سره یو مشخص شمیر توکي وټاکئ. د دې په مرسته، تاسو کولی شئ یو واحد توکي یا ځینې ځانګړتیاوې وټاکئ، او د دوی پر بنسټ نوي شیان هم جوړ کړئ. راځئ وګورو چې څنګه cmdlet د ساده مثالونو په کارولو سره کار کوي.
لاندې کمانډ د 10 پروسو په اړه معلومات ښیې چې د RAM اعظمي مقدار مصرفوي (WS ملکیت):
Get-Process | Sort-Object WS -Descending | Select-Object -First 10
تاسو کولی شئ د پایپ لاین څخه تیریږي یوازې د شیانو ځانګړي ملکیتونه وټاکئ او د دوی پراساس نوي رامینځته کړئ:
Get-Process | Select-Object ProcessName, Id -First 1
د پایپ لاین د عملیاتو په پایله کې، موږ به یو نوی څیز ترلاسه کړو، چې جوړښت به یې د Get-Process cmdlet لخوا بیرته راستانه شوي جوړښت څخه توپیر ولري. راځئ چې دا د Get-Member په کارولو سره تایید کړو:
Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member
په یاد ولرئ چې Select-Object یو واحد اعتراض (-لومړی 1) بیرته راګرځوي چې یوازې دوه هغه ساحې لري چې موږ یې مشخص کړي: د دوی ارزښتونه د لومړي اعتراض څخه کاپي شوي چې د Get-Process cmdlet لخوا پایپ لاین ته لیږدول شوي. په PowerShell سکریپټونو کې د شیانو رامینځته کولو یوه لاره د Select-Object کارولو پراساس ده:
$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()
د Select-Object په کارولو سره، تاسو کولی شئ د هغو شیانو لپاره محاسبه شوي ملکیتونه اضافه کړئ چې اړتیا ورته ښودل کیږي
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}
راځئ چې د شیانو جوړښت وګورو چې د لیږدونکي څخه تیریږي:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member
د هر څیز، ګروپ څیز او اندازه کولو څیز لپاره
د شیانو سره کار کولو لپاره نور cmdlets شتون لري. د مثال په توګه، راځئ چې د دریو خورا ګټورو په اړه وغږیږو:
د هر شی لپاره تاسو ته اجازه درکوي په پایپ لاین کې د هر څیز لپاره د پاور شیل کوډ چل کړئ:
ForEach-Object { блок сценария }
ګروپ - څیز د ملکیت ارزښت له مخې توکي ګروپ کړئ:
Group-Object PropertyName
که تاسو دا د -NoElement پیرامیټر سره پرمخ وړئ، تاسو کولی شئ په ګروپونو کې د عناصرو شمیر ومومئ.
اندازه کول - څیز په پایپ لاین کې د اعتراض ساحې ارزښتونو لخوا مختلف لنډیز پیرامیټرې راټولوي (مجموعه محاسبه کوي ، او لږترلږه ، اعظمي یا اوسط ارزښت هم لټوي):
Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum
عموما، د بحث شوي cmdlets په متقابل ډول کارول کیږي، او ډیری وختونه په سکریپټونو کې جوړ شوي.
د .NET او COM څیزونو جوړول (نوی څیز)
د .NET کور او COM انٹرفیسونو سره ډیری سافټویر برخې شتون لري چې د سیسټم مدیرانو لپاره ګټورې دي. د System.Diagnostics.EventLog ټولګي په کارولو سره، تاسو کولی شئ د سیسټم لاګونه په مستقیم ډول د وینډوز پاور شیل څخه اداره کړئ. راځئ چې د -TypeName پیرامیټر سره د New-Object cmdlet په کارولو سره د دې ټولګي مثال رامینځته کولو مثال وګورو:
New-Object -TypeName System.Diagnostics.EventLog
له هغه ځایه چې موږ د ځانګړي پیښې لاګ نه دی مشخص کړی ، نو د ټولګي پایله کې هیڅ معلومات نشته. د دې بدلولو لپاره، تاسو باید د جوړولو په وخت کې د -ArgumentList پیرامیټر په کارولو سره یو ځانګړي جوړونکي میتود ته زنګ ووهئ. که موږ غواړو د غوښتنلیک لاګ ته لاسرسی ومومئ ، موږ باید جوړونکي ته د دلیل په توګه "اپلیکیشن" تار انتقال کړو:
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog
مهرباني وکړئ په یاد ولرئ چې موږ د کمانډ محصول په $AppLog متغیر کې خوندي کړی. که څه هم پایپ لاینونه معمولا په متقابل حالت کې کارول کیږي، د سکریپټونو لیکل اکثرا د یو شی لپاره د حوالې ساتلو ته اړتیا لري. سربیره پردې، د اصلي .NET کور ټولګي د سیسټم نوم ځای کې شتون لري: په ډیفالټ کې PowerShell په دې کې ټاکل شوي ډولونه ګوري ، نو د System.Diagnostics.EventLog پرځای Diagnostics.EventLog لیکل خورا سم دي.
د لاګ سره کار کولو لپاره ، تاسو کولی شئ مناسب میتودونه وکاروئ:
$AppLog | Get-Member -MemberType Method
راځئ چې ووایو دا د Clear() میتود لخوا پاک شوی که چیرې د لاسرسي حق شتون ولري:
$AppLog.Clear()
New-Object cmdlet د COM اجزاوو سره کار کولو لپاره هم کارول کیږي. ډیری یې شتون لري - د وینډوز سکریپټ سرور سره چمتو شوي کتابتونونو څخه ActiveX غوښتنلیکونو ته ، لکه د انټرنیټ اکسپلورر. د COM څیز رامینځته کولو لپاره ، تاسو اړتیا لرئ -ComObject پیرامیټر د مطلوب ټولګي برنامې پروګ آیډ سره تنظیم کړئ:
New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject
د دې لپاره چې خپل توکي په خپل سري جوړښت سره جوړ کړئ، د نوي-آبجکټ کارول خورا لرغوني او پیچلي ښکاري؛ دا cmdlet د PowerShell څخه بهر د سافټویر اجزاوو سره کار کولو لپاره کارول کیږي. په راتلونکو مقالو کې به دا مسله په ډیر تفصیل سره بحث شي. د .NET او COM څیزونو سربیره، موږ به د CIM (WMI) او ADSI څیزونه هم وپلټو.
د جامد میتودونو غږ کول
ځینې .NET کور ټولګي نشي پیل کیدی، په شمول د System.Environment او System.Math. هغوی دي
[System.Environment] | Get-Member
یوازې د جامد غړو لیدو لپاره ، د سټیټیک پیرامیټر سره Get-Member ته زنګ ووهئ (د څیز ډول یادونه وکړئ):
[System.Environment] | Get-Member -Static
جامد ملکیتونو او میتودونو ته د لاسرسي لپاره ، د لغوي وروسته دورې پرځای دوه پرله پسې کالونونه وکاروئ:
[System.Environment]::OSVersion
یا
$test=[System.Math]::Sqrt(25)
$test
$test.GetType()
د PSCustomObject ډول
په PowerShell کې د ډیری ډیټا ډولونو څخه شتون لري، دا د یادولو وړ دی PSCustomObject، د خپل سري جوړښت سره د شیانو ذخیره کولو لپاره ډیزاین شوی. د نوي-آبجیکٹ cmdlet په کارولو سره د داسې شی رامینځته کول کلاسیک ، مګر پیچلي او زوړ لاره ګڼل کیږي:
$object = New-Object –TypeName PSCustomObject -Property @{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'}
راځئ چې د اعتراض جوړښت وګورو:
$object | Get-Member
د PowerShell 3.0 سره پیل کول، یو بل ترکیب شتون لري:
$object = [PSCustomObject]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
تاسو کولی شئ معلوماتو ته په یو مساوي لارو لاسرسی ومومئ:
$object.Name
$object.'Name'
$value = 'Name'
$object.$value
دلته د موجوده هشټبل په یوه شی کې د بدلولو یوه بیلګه ده:
$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()
د دې ډول شیانو یو نیمګړتیا دا ده چې د دوی ملکیتونو ترتیب کولی شي بدلون ومومي. د دې څخه د مخنیوي لپاره، تاسو باید د [حکم شوي] صفت وکاروئ:
$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
د اعتراض د جوړولو لپاره نور اختیارونه شتون لري: پورته موږ د cmdlet کارولو ته وکتل
$object | Add-Member –MemberType NoteProperty –Name Age –Value 33
$object | Get-Member
د Add-Member cmdlet تاسو ته اجازه درکوي چې د "-MemberType ScriptMethod" ساختمان په کارولو سره نه یوازې ملکیتونه، بلکې مخکې جوړ شوي $ اعتراض ته میتودونه هم اضافه کړئ:
$ScriptBlock = {
# код
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member
مهرباني وکړئ په یاد ولرئ چې موږ د نوي میتود لپاره د کوډ ذخیره کولو لپاره د سکریپټ بلاک ډول ډول $ScriptBlock متغیر کارولی.
د ملکیتونو لرې کولو لپاره، اړونده طریقه وکاروئ:
$object.psobject.properties.remove('Name')
خپل ټولګي جوړول
PowerShell 5.0 د تعریف کولو وړتیا معرفي کړه
class MyClass
{
# тело класса
}
دا یو ریښتینی .NET کور ډول دی، د بدن سره چې د هغې ملکیتونه، میتودونه، او نور عناصر بیانوي. راځئ چې د ساده ټولګي تعریف کولو مثال وګورو:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
}
د یو څیز جوړولو لپاره (د ټولګي مثال)، cmdlet وکاروئ
$object = New-Object -TypeName MyClass
او یا
$object = [MyClass]::new()
راځئ چې د شیانو جوړښت تحلیل کړو:
$object | Get-Member
د سکوپ په اړه مه هېروئ: تاسو نشئ کولی د ډول نوم ته د تار په توګه راجع کړئ یا د سکریپټ یا ماډل څخه بهر یو ډول لفظي وکاروئ په کوم کې چې ټولګی تعریف شوی وي. په دې حالت کې، افعال کولی شي د ټولګي مثالونه (شیان) بیرته راولي چې د ماډل یا سکریپټ څخه بهر د لاسرسي وړ وي.
د شیانو د جوړولو وروسته، د هغې ځانګړتیاوې ډک کړئ:
$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object
په یاد ولرئ چې د ټولګي توضیحات نه یوازې د ملکیت ډولونه مشخص کوي ، بلکه د دوی اصلي ارزښتونه هم ټاکي:
class Example
{
[string]$Name = 'John Doe'
}
د ټولګي میتود تشریح د فنکشن توضیحاتو سره ورته وي مګر د فنکشن کلمې کارولو پرته. لکه څنګه چې په فعالیت کې، پیرامیټونه میتودونو ته لیږدول کیږي که اړتیا وي:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
#описание метода
Smile([bool]$param1)
{
If($param1) {
Write-Host ':)'
}
}
}
اوس زموږ د ټولګي استازی مسکا کولی شي:
$object = [MyClass]::new()
$object.Smile($true)
میتودونه ډیر بار کیدی شي؛ سربیره پردې ، یو ټولګي لري
class MyClass2 : MyClass
{
#тело нового класса, базовым для которого является MyClass
}
[MyClass2]::new().Smile($true)
په PowerShell کې د شیانو سره د کار کولو زموږ توضیحات خورا بشپړ ندي. په لاندې خپرونو کې، موږ به هڅه وکړو چې دا د عملي مثالونو سره ژور کړو: په لړۍ کې پنځمه مقاله به د دریمې ډلې سافټویر برخو سره د PowerShell ادغام مسلو ته وقف شي. پخوانۍ برخې په لاندې لینکونو کې موندلی شئ.
سرچینه: www.habr.com