.NET ve COM Nesneleri (New-Object) Oluşturma
Birçok sistem yönetimi görevi .NET Framework com arabirimleri ve com arabirimleri ile yazılım bileşenleri vardır. Windows PowerShell bileşenleri kullanmana olanak sağlar, bu nedenle cmdlet'ler kullanılarak gerçekleştirilecek görevlerle sınırlı olmazsınız. İlk sürümde yer alan cmdlet'Windows PowerShell uzak bilgisayarlarda çalışmıyor. Doğrudan .NET Framework System.Diagnostics.EventLog sınıfını kullanarak olay günlüklerini yönetme sırasında bu sınırlamayı nasıl Windows PowerShell.
Olay New-Object Erişimi için Güvenlik Bilgileri Kullanma
Sınıf .NET Framework Kitaplığı, olay günlüklerini yönetmek için kullanılan System.Diagnostics.EventLog adlı bir sınıf içerir. TypeName parametresiyle cmdlet'ini kullanarak bir .NET Framework New-Object sınıfının yeni bir örneğini oluşturabilirsiniz. Örneğin, aşağıdaki komut bir olay günlüğü başvurusu oluşturur:
New-Object -TypeName System.Diagnostics.EventLog
Max(K) Retain OverflowAction Entries Name
------ ------ -------------- ------- ----
Komut EventLog sınıfının bir örneğini oluşturdu, ancak örnek herhangi bir veri içermez. Bunun nedeni belirli bir olay günlüğü belirtmemizdir. Gerçek olay günlüğünü nasıl elde musunuz?
Oluşturucuları New-Object
Belirli bir olay günlüğüne başvurmak için günlüğün adını belirtmeniz gerekir. New-Object bir ArgumentList parametresine sahip. Bu parametreye değer olarak geçersiniz bağımsız değişkenleri nesnesinin özel bir başlangıç yöntemi tarafından kullanılır. yöntemi, nesnesini oluşturmak için kullanılan bir oluşturucu olarak adlandırılır. Örneğin, Uygulama günlüğüne başvuru almak için 'Application' dizesini bağımsız değişken olarak belirtirsiniz:
New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
Max(K) Retain OverflowAction Entries Name
------ ------ -------------- ------- ----
16,384 7 OverwriteOlder 2,160 Application
Not
.NET Framework temel sınıfların çoğu Sistem ad alanına ait olduğu için, Windows PowerShell belirttiğiniz typename için bir eşleşme bulamazsa sistem ad alanı içinde belirttiğiniz sınıfları otomatik olarak bulmaya çalışır. Başka bir ifadeyle System.Diagnostics.EventLog yerine Diagnostics.EventLog belirtesiniz.
Nesneleri Değişkenlere Depolama
Geçerli kabukta kullanmak için bir nesneye başvuru depolamak istiyor olabilirsiniz. Bu Windows PowerShell işlem hatlarıyla çok fazla iş yapma, değişkenlere olan ihtiyacı daha az hale getirirken, bazen nesnelere yapılan başvuruların değişkenlerde depolanması, bu nesneleri işlemeyi daha kullanışlı hale getirir.
Windows PowerShell nesne olarak adlandırılmış değişkenler oluşturmanıza olanak sağlar. Herhangi bir geçerli Windows PowerShell çıkışı bir değişkende depolanmış olabilir. Değişken adları her zaman ile $ başlar.
Uygulama günlüğü başvurularını $AppLog adlı bir değişkende depolamak için değişkenin adını ve ardından eşittir işareti yazın ve ardından Uygulama günlüğü nesnesini oluşturmak için kullanılan komutu yazın:
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
Daha sonra $AppLog, Uygulama günlüğünü içerdiğini görebilir:
$AppLog
Max(K) Retain OverflowAction Entries Name
------ ------ -------------- ------- ----
16,384 7 OverwriteOlder 2,160 Application
New-Object ile Uzak Olay Günlüğüne Erişme
Önceki bölümde kullanılan komutlar yerel bilgisayarı hedefler; Get-EventLog cmdlet'i bunu yapar. Uzak bir bilgisayarda Uygulama günlüğüne erişmek için, bağımsız değişken olarak hem günlük adını hem de bilgisayar adını (veya IP adresini) s eklisiniz.
$RemoteAppLog = New-Object -TypeName System.Diagnostics.EventLog Application,192.168.1.81
$RemoteAppLog
Max(K) Retain OverflowAction Entries Name
------ ------ -------------- ------- ----
512 7 OverwriteOlder 262 Application
Artık değişkende depolanan bir olay günlüğüne başvuruya sahip $RemoteAppLog olduğunuza göre, bu günlükte hangi görevleri gerçekleştirebilirsiniz?
Nesne Yöntemleriyle Olay Günlüğünü Temizleme
Nesnelerin genellikle görevleri gerçekleştirmek için çağrılan yöntemleri vardır. bir Get-Member nesnesiyle ilişkili yöntemleri görüntülemek için kullanabilirsiniz. Aşağıdaki komut ve seçilen çıkış, EventLog sınıfının bazı yöntemlerini gösterir:
$RemoteAppLog | Get-Member -MemberType Method
TypeName: System.Diagnostics.EventLog
Name MemberType Definition
---- ---------- ----------
...
Clear Method System.Void Clear()
Close Method System.Void Close()
...
GetType Method System.Type GetType()
...
ModifyOverflowPolicy Method System.Void ModifyOverflowPolicy(Overfl...
RegisterDisplayName Method System.Void RegisterDisplayName(String ...
...
ToString Method System.String ToString()
WriteEntry Method System.Void WriteEntry(String message),...
WriteEvent Method System.Void WriteEvent(EventInstance in...
Olay günlüğünü temizlemek için 'Clear()' yöntemi kullanılabilir. Yöntem çağrılırken, yöntem bağımsız değişken gerektirmese bile her zaman yöntem adını parantezle izlemeniz gerekir. Bu, Windows PowerShell ile aynı adla olası bir özelliği birbirinden ayırt etmek için bir yöntem sağlar. Clear yöntemini çağıran aşağıdakini yazın:
$RemoteAppLog.Clear()
Günlüğü görüntülemek için aşağıdakini yazın. Olay günlüğünün temiz olduğunu ve şimdi 262 yerine 0 girdisi olduğunu görüyorsunuz:
$RemoteAppLog
```Output
Max(K) Retain OverflowAction Entries Name
------ ------ -------------- ------- ----
512 7 OverwriteOlder 0 Application
New-Object ile COM Nesneleri Oluşturma
Bileşen Nesne New-Object Modeli (COM) bileşenleriyle çalışmak için kullanabilirsiniz. Bileşenler, Windows Script Host (WSH) ile birlikte gelen çeşitli kitaplıklardan, çoğu ActiveX yüklü Internet Explorer gibi farklı uygulamalara kadar birçok farklı kitaplıktan oluşur.
New-ObjectCOM .NET Framework Runtime-Callable oluşturmak için sarmalayıcıları kullanır, bu nedenle COM nesnelerini .NET Framework ile aynı sınırlamalara sahiptir. COM nesnesi oluşturmak için ComObject parametresini kullanmak istediğiniz COM sınıfının Program Tanımlayıcısı veya ProgId değeriyle belirtmeniz gerekir. COM kullanımı sınırlamaları ve sistemde hangi ProgId'ler olduğunu belirlemek bu kullanıcı kılavuzunun kapsamının dışındadır, ancak WSH gibi ortamlardan en iyi bilinen nesneler Windows PowerShell.
Şu progidleri belirterek WSH nesnelerini oluşturabilirsiniz: WScript.Shell, WScript.Network, Scripting.Dictionary ve Scripting.FileSystemObject. Aşağıdaki komutlar bu nesneleri oluşturur:
New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject
Bu sınıfların işlevlerinin çoğu Windows PowerShell diğer yollarla kullanılabilir hale geliyor olsa da, kısayol oluşturma gibi birkaç görevi WSH sınıflarını kullanarak yapmak yine de daha kolaydır.
WScript.Shell ile Masaüstü Kısayolu Oluşturma
COM nesnesiyle hızlı bir şekilde gerçekleştirilecek görevlerden biri kısayol oluşturmaktır. Masaüstünüzde uygulamanın giriş klasörüne bağlantı olan bir kısayol oluşturmak Windows PowerShell. İlk olarak, $WshShell adlı değişkende depolayacak WScript.Shell'e bir başvuru oluşturmanız $WshShell:
$WshShell = New-Object -ComObject WScript.Shell
Get-Member COM nesneleriyle birlikte çalışır, bu nedenle aşağıdakini yazarak nesnenin üyelerini keşfedebilirsiniz:
$WshShell | Get-Member
TypeName: System.__ComObject#{41904400-be18-11d3-a28b-00104bd35090}
Name MemberType Definition
---- ---------- ----------
AppActivate Method bool AppActivate (Variant, Va...
CreateShortcut Method IDispatch CreateShortcut (str...
...
Get-Member , giriş sağlamak için piping yerine kullanabileceğiniz isteğe bağlı bir InputObject parametresine Get-Member sahip. Bunun yerine Get-Member -InputObject komutunu kullanarak komutunu kullanarak yukarıda gösterildiği gibi aynı çıktıyı $WshShell. InputObject kullanırsanız, bağımsız değişkenini tek bir öğe olarak kabul eder. Bu, bir değişkende birden fazla nesne varsa bunları Get-Member bir nesne dizisi olarak işley olduğu anlamına gelir. Örneğin:
$a = 1,2,"three"
Get-Member -InputObject $a
TypeName: System.Object[]
Name MemberType Definition
---- ---------- ----------
Count AliasProperty Count = Length
...
WScript.Shell CreateShortcut yöntemi tek bir bağımsız değişken kabul eder ve oluşturul edilecek kısayol dosyasının yoludur. Masaüstü için tam yolu yazabilirsiniz ancak bunun daha kolay bir yolu vardır. Masaüstü normalde geçerli kullanıcının giriş klasörünün içinde Desktop adlı bir klasörle temsil edilen bir klasördür. Windows PowerShell klasörün yolunu $Home içeren bir değişkeni vardır. Bu değişkeni kullanarak giriş klasörünün yolunu belirtebilirsiniz ve ardından şunları yazarak Desktop klasörünün adını ve oluşturmak için kısayolun adını ekleyebiliriz:
$lnk = $WshShell.CreateShortcut("$Home\Desktop\PSHome.lnk")
Çift tırnak içinde değişken adına benzer bir şey kullanırken, Windows PowerShell eşleşen bir değerin yerine kullanmaya çalışır. Tek tırnak kullanırsanız, Windows PowerShell değişken değerinin yerine kullanmayı denemez. Örneğin, aşağıdaki komutları yazmayı deneyin:
"$Home\Desktop\PSHome.lnk"
C:\Documents and Settings\aka\Desktop\PSHome.lnk
'$Home\Desktop\PSHome.lnk'
$Home\Desktop\PSHome.lnk
Artık yeni bir kısayol başvurusu $lnk içeren adlı bir değişkenimiz var. Üyelerini görmek için bunu 'a Get-Member yöneltin. Aşağıdaki çıktıda kısayolu oluşturmayı tamamlamak için kullanmamız gereken üyeler gösterilmiştir:
$lnk | Get-Member
TypeName: System.__ComObject#{f935dc23-1cf0-11d0-adb9-00c04fd58a0b}
Name MemberType Definition
---- ---------- ----------
...
Save Method void Save ()
...
TargetPath Property string TargetPath () {get} {set}
Windows PowerShell için uygulama klasörü olan TargetPath'i belirtmemiz ve ardından Save $lnk ** ** kısayolunu kaydetmemiz gerekir. Uygulama Windows PowerShell yolu değişkende depolanır, $PSHome bu nedenle bunu yazarak yapabiliriz:
$lnk.TargetPath = $PSHome
$lnk.Save()
Internet Explorer'den Windows PowerShell
Birçok uygulama (Microsoft Office ailesi ve Internet Explorer dahil) COM kullanılarak otomatik hale kullanılabilir. Internet Explorer COM tabanlı uygulamalarla çalışırken karşılaşılan tipik tekniklerden ve sorunlardan bazıları göstermektedir.
Internet Explorer ProgId, InternetExplorer.Application belirterek bir Internet Explorer örneği oluşturabilirsiniz:
$ie = New-Object -ComObject InternetExplorer.Application
Bu komut Internet Explorer başlatır, ancak görünür hale değildir. Get-Process yazarak iexplore adlı bir sürecin çalıştırılanı olduğunu görebilirsiniz. Aslında, bir Windows PowerShell çıkarsanız işlem çalışmaya devam eder. Bilgisayarı yeniden başlatmanız veya görev yöneticisi gibi bir araç kullanarak iexplore işlemini sona erdirebilirsiniz.
Not
Genellikle yürütülebilir dosyalar olarak adlandırılan ayrı işlemler olarak ActiveX COM nesneleri, başladıkları zaman bir kullanıcı arabirimi penceresi görüntüleniyor olabilir veya görüntülemez. Bir pencere oluştursalar ancak Internet Explorer gibi görünür hale Windows odak genellikle Windows masaüstüne taşınacak ve pencereyle etkileşim kurmak için pencereyi görünür hale gelecek şekilde oluşturmanız gerekir.
$ie | Get-Memberyazarak, dosyanın özelliklerini ve yöntemlerini Internet Explorer. Görünen pencereyi Internet Explorer için Visible özelliğini şu şekilde $true ayarlayın:
$ie.Visible = $true
Daha sonra Navigate yöntemini kullanarak belirli bir Web adresine gidin:
$ie.Navigate("https://devblogs.microsoft.com/scripting/")
Web sayfasından Internet Explorer nesne modelinin diğer üyelerini kullanarak metin içeriğini almak mümkündür. Aşağıdaki komut, geçerli Web sayfasının gövdesinde HTML metnini görüntüler:
$ie.Document.Body.InnerText
PowerShell Internet Explorer den gelen bir kaynağı kapatmak için yöntemini Quit() çağırın:
$ie.Quit()
Bu, kapanmaya zorlar. Değişken, $ie com nesnesi gibi görünüyor olsa bile artık geçerli bir başvuruya sahip değildir. Kullanmayı denerse otomasyon hatası alırsınız:
$ie | Get-Member
Get-Member : Exception retrieving the string representation for property "Appli
cation" : "The object invoked has disconnected from its clients. (Exception fro
m HRESULT: 0x80010108 (RPC_E_DISCONNECTED))"
At line:1 char:16
+ $ie | Get-Member <<<<
$ie = $null gibi bir komutla kalan başvurudan kaldırabilir veya yazarak değişkeni tamamen kaldırabilirsiniz:
Remove-Variable ie
Not
Bir başvuru kaldıran yürütülebilir ActiveX veya çalışmaya devam etmek için ortak bir standart yoktur. Uygulamanın görünür olup olmadığı, düzenlenmiş bir belgenin içinde çalıştırılıyor olup olmadığı ve hatta uygulamanın hala Windows PowerShell olup olmadığı gibi durumlara bağlı olarak uygulama çıkışa neden olabilir veya çıkılamayabilirsiniz. Bu nedenle, bir dosyada kullanmak istediğiniz her ActiveX dosyanın sonlandırma davranışını test Windows PowerShell.
.NET Framework-Wrapped COM nesneleri hakkında uyarılar alma
bazı durumlarda, bir COM nesnesi ilişkili bir .NET Framework çalışma zamanına çağrılabilir sarmalayıcı veya rcw içerebilir ve bu, tarafından kullanılır New-Object . RCW davranışı normal COM nesnesinin davranışından farklı olabileceğinden, New-Object RCW erişimi konusunda sizi uyarmak Için katı bir parametreye sahiptir. Katı parametresini belirleyip, BIR RCW kullanan bir com nesnesi oluşturursanız, bir uyarı iletisi alırsınız:
$xl = New-Object -ComObject Excel.Application -Strict
New-Object : The object written to the pipeline is an instance of the type "Mic
rosoft.Office.Interop.Excel.ApplicationClass" from the component's primary inte rop assembly. If
this type exposes different members than the IDispatch members , scripts written to work with this
object might not work if the primary intero p assembly is not installed. At line:1 char:17 + $xl =
New-Object <<<< -ComObject Excel.Application -Strict
Nesne yine de oluşturulsa da, standart bir COM nesnesi olmadığı hakkında uyarılırsınız.