Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

PowerShell පරිවර්තක කවුළුවේ ඇති විධානවල පෙළ ප්‍රතිදානය මිනිස් සංජානනයට සුදුසු ආකාරයෙන් තොරතුරු ප්‍රදර්ශනය කිරීමේ ක්‍රමයක් පමණි. ඇත්තටම බදාදා දිශානුගත වස්තූන් සමඟ වැඩ කිරීමට: cmdlets සහ ශ්රිතයන් ඒවා ආදානය ලෙස ලබා ගනී පිටවීමේ දී ආපසු, සහ අන්තර්ක්‍රියාකාරීව සහ ස්ක්‍රිප්ට් වල පවතින විචල්‍ය වර්ග .NET පන්ති මත පදනම් වේ. ලිපි මාලාවේ සිව්වන ලිපියෙන් අපි වස්තූන් සමඟ වැඩ කිරීම වඩාත් විස්තරාත්මකව අධ්‍යයනය කරමු.

අන්තර්ගත වගුව:

PowerShell හි ඇති වස්තූන්
වස්තූන්ගේ ව්යුහය බැලීම
වස්තූන් පෙරීම
වස්තූන් වර්ග කිරීම
වස්තූන් සහ ඒවායේ කොටස් තෝරා ගැනීම
එක් එක් වස්තුව, සමූහ-වස්තුව සහ මිනුම්-වස්තුව සඳහා
.NET සහ COM වස්තු නිර්මාණය කිරීම (නව-වස්තුව)
ස්ථිතික ක්රම ඇමතීම
PSCustomObject ටයිප් කරන්න
ඔබේම පන්ති නිර්මාණය කිරීම

PowerShell හි ඇති වස්තූන්

වස්තුවක් යනු දත්ත ක්ෂේත්‍ර (ගුණාංග, සිදුවීම්, ආදිය) සහ ඒවා සැකසීමේ ක්‍රම (ක්‍රම) එකතුවක් බව අපි සිහිපත් කරමු. එහි ව්‍යුහය වර්ගයක් මගින් නිශ්චිතව දක්වා ඇත, එය සාමාන්‍යයෙන් ඒකාබද්ධ .NET Core වේදිකාවේ භාවිතා වන පන්ති මත පදනම් වේ. COM, CIM (WMI) සහ ADSI වස්තූන් සමඟ වැඩ කිරීමට ද හැකිය. දත්ත මත විවිධ ක්‍රියා සිදු කිරීම සඳහා ගුණ සහ ක්‍රම අවශ්‍ය වේ; ඊට අමතරව, PowerShell හි, වස්තු ශ්‍රිත සහ cmdlets වෙත තර්ක ලෙස ලබා දිය හැකි අතර, ඒවායේ අගයන් විචල්‍යයන් වෙත පැවරිය හැක, සහ එහි ද පවතී. විධාන සංයුතිය යාන්ත්රණය (වාහකය හෝ නල මාර්ගය). නල මාර්ගයේ සෑම විධානයක්ම එහි ප්‍රතිදානය ඊළඟට වස්තුවෙන් වස්තුව වෙත යවයි. සැකසීම සඳහා, ඔබට සම්පාදනය කරන ලද cmdlets භාවිතා කළ හැකිය, නැතහොත් ඔබේම දෑ නිර්මාණය කළ හැකිය උසස් විශේෂාංගනල මාර්ගයේ වස්තූන් සමඟ විවිධ උපාමාරු සිදු කිරීම සඳහා: පෙරීම, වර්ග කිරීම, කණ්ඩායම් කිරීම සහ ඒවායේ ව්යුහය වෙනස් කිරීම පවා. මෙම පෝරමයේ දත්ත සම්ප්‍රේෂණය කිරීම බරපතල වාසියක් ඇත: ලැබෙන කණ්ඩායමට බයිට් ප්‍රවාහය (පෙළ) විග්‍රහ කිරීමට අවශ්‍ය නොවේ, සුදුසු ගුණාංග සහ ක්‍රම ඇමතීමෙන් අවශ්‍ය සියලු තොරතුරු පහසුවෙන් ලබා ගත හැකිය.

වස්තූන්ගේ ව්යුහය බැලීම

උදාහරණයක් ලෙස, පද්ධතියේ ක්‍රියාත්මක වන ක්‍රියාවලි පිළිබඳ තොරතුරු ලබා ගැනීමට ඔබට ඉඩ සලසන Get-Process cmdlet ධාවනය කරමු:

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

එය ආපසු ලබා දුන් වස්තූන්ගේ ගුණාංග සහ ඒවායේ ක්‍රම පිළිබඳව කිසිදු අදහසක් ලබා නොදෙන ආකෘතිගත පෙළ දත්ත කිහිපයක් පෙන්වනු ඇත. ප්‍රතිදානය මනාව සකස් කිරීම සඳහා, අපි වස්තූන්ගේ ව්‍යුහය පරීක්ෂා කරන්නේ කෙසේදැයි ඉගෙන ගත යුතු අතර, Get-Member cmdlet අපට මේ සඳහා උපකාරී වනු ඇත:

Get-Process | Get-Member

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

මෙන්න අපි දැනටමත් වර්ගය සහ ව්‍යුහය දකිමු, අතිරේක පරාමිතීන් ආධාරයෙන් අපට උදාහරණයක් ලෙස, ආදානයට ඇතුළත් කර ඇති වස්තුවේ ගුණාංග පමණක් පෙන්විය හැකිය:

Get-Process | Get-Member -MemberType Property

පරිපාලන ගැටළු අන්තර්ක්‍රියාකාරීව විසඳීමට හෝ ඔබේම ස්ක්‍රිප්ට් ලිවීමට මෙම දැනුම අවශ්‍ය වනු ඇත: නිදසුනක් ලෙස, ප්‍රතිචාර දැක්වීමේ දේපල භාවිතයෙන් එල්ලෙන ක්‍රියාවලීන් පිළිබඳ තොරතුරු ලබා ගැනීමට.

වස්තූන් පෙරීම

PowerShell යම් කොන්දේසියක් සපුරාලන වස්තූන් නල මාර්ගයක් හරහා ගමන් කිරීමට ඉඩ දෙයි:

Where-Object { блок сценария }

වරහන් තුළ ස්ක්‍රිප්ට් බ්ලොක් ක්‍රියාත්මක කිරීමේ ප්‍රතිඵලය බූලියන් අගයක් විය යුතුය. එය සත්‍ය ($සත්‍ය) නම්, Where-Object cmdlet වෙත ආදානය කරන වස්තුව නල මාර්ගය ඔස්සේ යවනු ලැබේ, එසේ නොමැතිනම් ($false) එය මකා දැමෙනු ඇත. උදාහරණයක් ලෙස, නවතා දැමූ Windows Server සේවා ලැයිස්තුවක් පෙන්වමු, i.e. තත්ත්‍ව දේපල "නැවතුම්" ලෙස සකසා ඇති අය:

Get-Service | Where-Object {$_.Status -eq "Stopped"}

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

මෙන්න නැවතත් අපි පාඨමය නිරූපණයක් දකිමු, නමුත් ඔබට නල මාර්ගය හරහා ගමන් කරන වස්තූන්ගේ වර්ගය සහ අභ්යන්තර ව්යුහය තේරුම් ගැනීමට අවශ්ය නම් එය අපහසු නැත:

Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

වස්තූන් වර්ග කිරීම

වස්තූන් නල මාර්ග සැකසීමේදී, බොහෝ විට ඒවා වර්ග කිරීමට අවශ්ය වේ. Sort-Object cmdlet මගින් ගුණාංගවල නම් (වර්ග කිරීමේ යතුරු) සම්මත කර ඇති අතර ඒවායේ අගයන් අනුව ඇණවුම් කරන ලද වස්තු ආපසු ලබා දේ. ක්‍රියාත්මක වන ක්‍රියාවලි වල ප්‍රතිදානය CPU වැය කරන කාලය අනුව වර්ග කිරීම පහසුය (cpu දේපල):

Get-Process | Sort-Object –Property cpu

Sort-Object cmdlet ඇමතීමේ දී -Property පරාමිතිය මඟ හැරිය හැක; එය පෙරනිමියෙන් භාවිතා වේ. ප්‍රතිලෝම වර්ග කිරීම සඳහා, -Descending පරාමිතිය භාවිතා කරන්න:

Get-Process | Sort-Object cpu -Descending

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

වස්තූන් සහ ඒවායේ කොටස් තෝරා ගැනීම

Select-Object cmdlet මඟින් -First හෝ -Last පරාමිති භාවිතයෙන් නල මාර්ගයක ආරම්භයේ හෝ අවසානයේ නිශ්චිත වස්තු සංඛ්‍යාවක් තෝරා ගැනීමට ඔබට ඉඩ සලසයි. එහි ආධාරයෙන්, ඔබට තනි වස්තූන් හෝ ඇතැම් ගුණාංග තෝරා ගත හැකි අතර, ඒවා මත පදනම්ව නව වස්තූන් නිර්මාණය කළ හැකිය. සරල උදාහරණ භාවිතා කරමින් cmdlet ක්‍රියා කරන ආකාරය බලමු.

පහත විධානය මඟින් උපරිම RAM ප්‍රමාණය (WS දේපල) පරිභෝජනය කරන ක්‍රියාවලි 10 පිළිබඳ තොරතුරු පෙන්වයි:

Get-Process | Sort-Object WS -Descending | Select-Object -First 10

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

ඔබට නල මාර්ගය හරහා ගමන් කරන වස්තූන්ගේ ඇතැම් ගුණාංග පමණක් තෝරාගෙන ඒවා මත පදනම්ව නව ඒවා නිර්මාණය කළ හැකිය:

Get-Process | Select-Object ProcessName, Id -First 1

නල මාර්ගයේ ක්රියාකාරිත්වයේ ප්රතිඵලයක් වශයෙන්, අපට නව වස්තුවක් ලැබෙනු ඇත, එහි ව්යුහය Get-Process cmdlet විසින් ආපසු ලබා දෙන ව්යුහයට වඩා වෙනස් වේ. අපි Get-Member භාවිතයෙන් මෙය සත්‍යාපනය කරමු:

Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

Select-Object විසින් අප සඳහන් කළ ක්ෂේත්‍ර දෙකක් පමණක් ඇති තනි වස්තුවක් (-පළමු 1) ලබා දෙන බව සලකන්න: ඒවායේ අගයන් Get-Process cmdlet මගින් නල මාර්ගයට ගිය පළමු වස්තුවෙන් පිටපත් කර ඇත. PowerShell ස්ක්‍රිප්ට් වල වස්තු සෑදීමේ එක් ක්‍රමයක් වන්නේ Select-Object භාවිතා කිරීම මත ය:

$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

Select-Object භාවිතයෙන්, ඔබට නිරූපනය කිරීමට අවශ්‍ය වස්තු වලට පරිගණක ගුණාංග එක් කළ හැක. හැෂ් වගු. මෙම අවස්ථාවෙහිදී, එහි පළමු යතුරේ වටිනාකම දේපල නාමයට අනුරූප වන අතර දෙවන යතුරේ වටිනාකම වත්මන් නල මාර්ගයේ දේපල වටිනාකමට අනුරූප වේ:

Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

වාහකය හරහා ගමන් කරන වස්තූන්ගේ ව්යුහය දෙස බලමු:

Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

එක් එක් වස්තුව, සමූහ-වස්තුව සහ මිනුම්-වස්තුව සඳහා

වස්තූන් සමඟ වැඩ කිරීම සඳහා වෙනත් cmdlets ඇත. උදාහරණයක් ලෙස, අපි වඩාත් ප්‍රයෝජනවත් තුන ගැන කතා කරමු:

එක් එක් වස්තුව සඳහා නල මාර්ගයේ එක් එක් වස්තුව සඳහා PowerShell කේතය ධාවනය කිරීමට ඔබට ඉඩ සලසයි:

ForEach-Object { блок сценария }

සමූහ-වස්තුව දේපල වටිනාකම අනුව වස්තු කාණ්ඩ කරන්න:

Group-Object PropertyName

ඔබ එය -NoElement පරාමිතිය සමඟ ක්‍රියාත්මක කරන්නේ නම්, ඔබට කණ්ඩායම්වල ඇති මූලද්‍රව්‍ය ගණන සොයාගත හැකිය.

මනින-වස්තුව නල මාර්ගයේ වස්තු ක්ෂේත්‍ර අගයන් මගින් විවිධ සාරාංශ පරාමිතීන් එකතු කරයි (එකතුව ගණනය කරයි, සහ අවම, උපරිම හෝ සාමාන්‍ය අගය ද සොයා ගනී):

Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum

සාමාන්‍යයෙන්, සාකච්ඡා කෙරෙන cmdlets අන්තර්ක්‍රියාකාරී ලෙස භාවිතා වන අතර, බොහෝ විට ඒවා ස්ක්‍රිප්ට් වලින් නිර්මාණය වේ. කාර්යයන් Begin, Process සහ End blocks සමඟ.

.NET සහ COM වස්තු නිර්මාණය කිරීම (නව-වස්තුව)

පද්ධති පරිපාලකයින්ට ප්රයෝජනවත් වන .NET Core සහ COM අතුරුමුහුණත් සහිත බොහෝ මෘදුකාංග සංරචක ඇත. System.Diagnostics.EventLog පන්තිය භාවිතයෙන්, ඔබට Windows PowerShell වෙතින් සෘජුවම පද්ධති ලොග් කළමනාකරණය කළ හැක. -TypeName පරාමිතිය සමඟ New-Object cmdlet භාවිතා කරමින් මෙම පන්තියේ අවස්ථාවක් නිර්මාණය කිරීමේ උදාහරණයක් බලමු:

New-Object -TypeName System.Diagnostics.EventLog

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

අපි නිශ්චිත සිදුවීම් ලොගයක් සඳහන් නොකළ බැවින්, පන්තියේ ප්‍රතිඵලයක් ලෙස ලැබෙන අවස්ථාවෙහි දත්ත නොමැත. මෙය වෙනස් කිරීම සඳහා, ඔබ විසින් -ArgumentList පරාමිතිය භාවිතයෙන් එය නිර්මාණය කිරීමේදී විශේෂ ඉදිකිරීම් ක්‍රමයක් ඇමතීමට අවශ්‍ය වේ. අපට යෙදුම් ලොගයට ප්‍රවේශ වීමට අවශ්‍ය නම්, අපි "යෙදුම" තන්තුව තර්කයක් ලෙස ඉදිකිරීම්කරු වෙත යැවිය යුතුය:

$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

අපි $AppLog විචල්‍යයේ විධානයේ ප්‍රතිදානය සුරැකූ බව කරුණාවෙන් සලකන්න. නල මාර්ග අන්තර්ක්‍රියාකාරී මාදිලියේ බහුලව භාවිතා වුවද, ස්ක්‍රිප්ට් ලිවීමට බොහෝ විට වස්තුවක් වෙත යොමුවක් පවත්වා ගැනීම අවශ්‍ය වේ. මීට අමතරව, මූලික .NET Core පන්ති පද්ධති නාම අවකාශයේ අඩංගු වේ: PowerShell පෙරනිමියෙන් එහි නිශ්චිත වර්ග සඳහා සොයයි, එබැවින් System.Diagnostics.EventLog වෙනුවට Diagnostics.EventLog ලිවීම ඉතා නිවැරදිය.

ලොගය සමඟ වැඩ කිරීමට, ඔබට සුදුසු ක්රම භාවිතා කළ හැකිය:

$AppLog | Get-Member -MemberType Method

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

ප්‍රවේශ අයිතිවාසිකම් තිබේ නම් එය Clear() ක්‍රමය මගින් නිෂ්කාශනය වේ යැයි කියමු:

$AppLog.Clear()

New-Object cmdlet ද COM සංරචක සමඟ වැඩ කිරීමට භාවිතා කරයි. ඒවායින් බොහොමයක් තිබේ - වින්ඩෝස් ස්ක්‍රිප්ට් සේවාදායකය සමඟ සපයා ඇති පුස්තකාලවල සිට Internet Explorer වැනි ActiveX යෙදුම් දක්වා. COM වස්තුවක් සෑදීමට, ඔබට අවශ්‍ය පන්තියේ ක්‍රමලේඛන ProgId සමඟ -ComObject පරාමිතිය සැකසිය යුතුය:

New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject

අත්තනෝමතික ව්‍යුහයක් සහිත ඔබේම වස්තු නිර්මාණය කිරීම සඳහා, New-Object භාවිතා කිරීම ඉතා පෞරාණික සහ අපහසු බව පෙනේ; මෙම cmdlet PowerShell ට බාහිර මෘදුකාංග සංරචක සමඟ වැඩ කිරීමට භාවිතා කරයි. ඉදිරි ලිපි වලදී මෙම ගැටළුව වඩාත් විස්තරාත්මකව සාකච්ඡා කරනු ඇත. .NET සහ COM වස්තු වලට අමතරව, අපි CIM (WMI) සහ ADSI වස්තු ද ගවේෂණය කරන්නෙමු.

ස්ථිතික ක්රම ඇමතීම

System.Environment සහ System.Math ඇතුළුව සමහර .NET Core පන්ති ක්‍ෂණිකව ආරම්භ කළ නොහැක. අර තියෙන්නේ ස්ථිතික සහ ස්ථිතික ගුණ සහ ක්‍රම පමණක් අඩංගු වේ. මේවා අත්‍යවශ්‍යයෙන්ම වස්තු නිර්මාණය නොකර භාවිතා කරන යොමු පුස්තකාල වේ. ඔබට ස්ථිතික පන්තියක් වචනාර්ථයක් හරහා වර්ග වරහන් තුළ ඇතුළත් කිරීමෙන් ඔබට යොමු කළ හැක. කෙසේ වෙතත්, අපි Get-Member භාවිතයෙන් වස්තුවේ ව්‍යුහය දෙස බැලුවහොත්, System.Environment වෙනුවට System.RuntimeType වර්ගය අපට පෙනෙනු ඇත:

[System.Environment] | Get-Member

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

ස්ථිතික සාමාජිකයින් පමණක් බැලීම සඳහා, -Static පරාමිතිය සමඟ Get-Member අමතන්න (වස්තු වර්ගය සටහන් කරන්න):

[System.Environment] | Get-Member -Static

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

ස්ථිතික ගුණ සහ ක්‍රම වෙත ප්‍රවේශ වීම සඳහා, වචනාර්ථයෙන් පසු කාල සීමාවක් වෙනුවට අඛණ්ඩ තීරු දෙකක් භාවිතා කරන්න:

[System.Environment]::OSVersion

නැතහොත්

$test=[System.Math]::Sqrt(25) 
$test
$test.GetType()

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

PSCustomObject ටයිප් කරන්න

PowerShell හි ඇති බොහෝ දත්ත වර්ග අතර, අත්තනෝමතික ව්‍යුහයක් සහිත වස්තූන් ගබඩා කිරීම සඳහා නිර්මාණය කර ඇති PSCustomObject සඳහන් කිරීම වටී. New-Object cmdlet භාවිතයෙන් එවැනි වස්තුවක් නිර්මාණය කිරීම සම්භාව්‍ය, නමුත් අපහසු සහ යල් පැන ගිය ක්‍රමයක් ලෙස සැලකේ:

$object = New-Object  –TypeName PSCustomObject -Property @{Name = 'Ivan Danko'; 
                                          City = 'Moscow';
                                          Country = 'Russia'}

වස්තුවේ ව්යුහය දෙස බලමු:

$object | Get-Member

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

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()

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

මෙම වර්ගයේ වස්තූන්ගේ අවාසි වලින් එකක් නම් ඒවායේ ගුණාංගවල අනුපිළිවෙල වෙනස් විය හැකිය. මෙය වළක්වා ගැනීම සඳහා, ඔබ [ඇණවුම් කළ] ගුණාංගය භාවිතා කළ යුතුය:

$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko'; 
                                          City = 'Moscow';
                                          Country = 'Russia'
}

වස්තුවක් නිර්මාණය කිරීම සඳහා වෙනත් විකල්ප තිබේ: ඉහත අපි cmdlet භාවිතා කිරීම දෙස බැලුවෙමු තෝරන්න-වස්තුව. ඉතිරිව ඇත්තේ මූලද්රව්ය එකතු කිරීම සහ ඉවත් කිරීම සොයා ගැනීමයි. පෙර උදාහරණයේ වස්තුව සඳහා මෙය කිරීම ඉතා සරල ය:

$object | Add-Member –MemberType NoteProperty –Name Age  –Value 33
$object | Get-Member

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

Add-Member cmdlet මඟින් ඔබට "-MemberType ScriptMethod" වින්‍යාසය භාවිතයෙන් පෙර නිර්මාණය කරන ලද $object සඳහා ගුණාංග පමණක් නොව, ක්‍රමද එකතු කිරීමට ඉඩ සලසයි:

$ScriptBlock = {
    # код 
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member

නව ක්‍රමය සඳහා කේතය ගබඩා කිරීමට අපි ScriptBlock ආකාරයේ $ScriptBlock විචල්‍යය භාවිතා කළ බව කරුණාවෙන් සලකන්න.

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

ගුණාංග ඉවත් කිරීමට, අනුරූප ක්රමය භාවිතා කරන්න:

$object.psobject.properties.remove('Name')

ඔබේම පන්ති නිර්මාණය කිරීම

PowerShell 5.0 මගින් නිර්වචනය කිරීමේ හැකියාව හඳුන්වා දෙන ලදී ශ්‍රේණි වස්තු-නැඹුරු ක්‍රමලේඛන භාෂා වල වාක්‍ය ඛණ්ඩ ලක්ෂණය භාවිතා කිරීම. Class යන සේවා වචනය මේ සඳහා අදහස් කර ඇත, ඉන්පසු ඔබ පන්තියේ නම සඳහන් කර එහි ශරීරය ක්‍රියාකරු වරහන් තුළ විස්තර කළ යුතුය:

class MyClass
{
    # тело класса
}

මෙය සත්‍ය .NET Core වර්ගයකි, එහි ගුණ, ක්‍රම සහ අනෙකුත් මූලද්‍රව්‍ය විස්තර කරන ශරීරයක් ඇත. සරලම පන්තිය නිර්වචනය කිරීමේ උදාහරණයක් බලමු:

class MyClass 
{
     [string]$Name
     [string]$City
     [string]$Country
}

වස්තුවක් සෑදීමට (පන්ති උදාහරණය), cmdlet භාවිතා කරන්න නව වස්තුව, හෝ වචනාර්ථයෙන් [MyClass] සහ ව්යාජ ස්ථිතික ක්රමය නව (පෙරනිමි ඉදිකිරීම්කරු):

$object = New-Object -TypeName MyClass

හෝ

$object = [MyClass]::new()

වස්තුවේ ව්යුහය විශ්ලේෂණය කරමු:

$object | Get-Member

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

විෂය පථය ගැන අමතක නොකරන්න: ඔබට තන්තුවක් ලෙස වර්ග නාමයක් යොමු කිරීමට හෝ පන්තිය නිර්වචනය කර ඇති ස්ක්‍රිප්ට් හෝ මොඩියුලයෙන් පරිබාහිර ටයිප් එකක් භාවිතා කළ නොහැක. මෙම අවස්ථාවෙහිදී, ශ්‍රිතයන්ට මොඩියුලයෙන් හෝ ස්ක්‍රිප්ටයෙන් පිටත ප්‍රවේශ විය හැකි පන්ති අවස්ථා (වස්තු) ආපසු ලබා දිය හැක.

වස්තුව නිර්මාණය කිරීමෙන් පසු, එහි ගුණාංග පුරවන්න:

$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

පන්ති විස්තරය දේපල වර්ග පමණක් නොව, ඒවායේ පෙරනිමි අගයන් ද සඳහන් කරන බව සලකන්න:

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)

ක්‍රම අධික ලෙස පැටවිය හැක; ඊට අමතරව, පන්තියක් ඇත ස්ථිතික ගුණාංග සහ ක්රම, මෙන්ම ඔවුන්ගේ නම් පන්තියේ නම සමග සමපාත වන ඉදිකිරීම්කරුවන්. ස්ක්‍රිප්ට් එකක හෝ පවර්ෂෙල් මොඩියුලයක අර්ථ දක්වා ඇති පන්තියක් තවත් එකක් සඳහා පදනමක් ලෙස ක්‍රියා කළ හැකිය - උරුමය ක්‍රියාත්මක වන්නේ එලෙස ය. මෙම අවස්ථාවේදී, දැනට පවතින .NET පන්ති මූලික ඒවා ලෙස භාවිතා කිරීමට අවසර ඇත:

class MyClass2 : MyClass
{
      #тело нового класса, базовым для которого является MyClass
}
[MyClass2]::new().Smile($true)

PowerShell හි ඇති වස්තූන් සමඟ වැඩ කිරීම පිළිබඳ අපගේ විස්තරය කිසිසේත්ම සම්පූර්ණ නොවේ. පහත ප්‍රකාශන වලදී, අපි එය ප්‍රායෝගික උදාහරණ සමඟ ගැඹුරු කිරීමට උත්සාහ කරමු: ලිපි මාලාවේ පස්වන ලිපිය PowerShell තෙවන පාර්ශවීය මෘදුකාංග සංරචක සමඟ ඒකාබද්ධ කිරීමේ ගැටළු සඳහා කැප කෙරේ. පසුගිය කොටස් පහත ලින්ක් වලින් සොයා ගත හැක.

1 කොටස: මූලික Windows PowerShell විශේෂාංග
2 කොටස: Windows PowerShell ක්‍රමලේඛන භාෂාවට හැඳින්වීම
3 කොටස: ස්ක්‍රිප්ට් සහ ශ්‍රිත වෙත පරාමිති ලබා දීම, cmdlets නිර්මාණය කිරීම

Windows PowerShell යනු කුමක්ද සහ එය භාවිතා කරන්නේ කුමක් සඳහාද? 4 වන කොටස: වස්තූන්, තමන්ගේම පන්ති සමඟ වැඩ කිරීම

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න