Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu örnek yalnızca Windows platformlarında çalışır.
Birçok sistem yönetimi görevini gerçekleştirmenizi sağlayan .NET Framework ve COM arabirimlerine sahip yazılım bileşenleri vardır. PowerShell bu bileşenleri kullanmanıza olanak tanır, bu nedenle cmdlet'ler kullanılarak gerçekleştirilebilecek görevlerle sınırlı değilsiniz. PowerShell'in ilk sürümündeki cmdlet'lerin çoğu uzak bilgisayarlarda çalışmaz. Doğrudan PowerShell'den .NET Framework System.Diagnostics.EventLog sınıfını kullanarak olay günlüklerini yönetirken bu sınırlamanın nasıl aşılacağını göstereceğiz.
Olay günlüğü erişimi için New-Object kullanma
.NET Framework Sınıf Kitaplığı, olay günlüklerini yönetmek için kullanılabilecek System.Diagnostics.EventLog adlı bir sınıf içerir. TypeName parametresiyle cmdlet'ini New-Object
kullanarak .NET Framework 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
------ ------ -------------- ------- ----
Komutu EventLog sınıfının bir örneğini oluşturmuş olsa da, örnek herhangi bir veri içermez. Bunun nedeni, belirli bir olay günlüğü belirtmemiş olmamızdır. Gerçek bir olay günlüğünü nasıl edinebilirsiniz?
Oluşturucuları New-Object ile kullanma
Belirli bir olay günlüğüne başvurmak için günlüğün adını belirtmeniz gerekir. New-Object
bir ArgumentList parametresine sahiptir. Bu parametreye değer olarak geçirdiğiniz bağımsız değişkenler, nesnesinin özel bir başlangıç yöntemi tarafından kullanılır. yöntemi, nesnesini oluşturmak için kullanıldığından oluşturucu olarak adlandırılır. Örneğin, Uygulama günlüğüne başvuru almak için bağımsız değişken olarak 'Application' dizesini belirtirsiniz:
New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
Max(K) Retain OverflowAction Entries Name
------ ------ -------------- ------- ----
16,384 7 OverwriteOlder 2,160 Application
Not
.NET sınıflarının çoğu Sistem ad alanında yer aldığı için PowerShell, belirttiğiniz tür adı için bir eşleşme bulamazsa Sistem ad alanında belirttiğiniz sınıfları otomatik olarak bulmaya çalışır. Bu, yerine System.Diagnostics.EventLog
belirtebileceğiniz Diagnostics.EventLog
anlamına gelir.
Nesneleri Değişkenlerde Depolama
Geçerli kabukta kullanabilmek için bir nesneye başvuru depolamak isteyebilirsiniz. PowerShell işlem hatlarıyla çok fazla çalışma yapmanıza olanak tanır, ancak değişkenlere olan ihtiyacı azaltsa da, bazen değişkenlerdeki nesnelere yönelik başvuruları depolamak bu nesneleri işlemeyi daha kolay hale getirir.
Geçerli bir PowerShell komutunun çıkışı bir değişkende depolanabilir. Değişken adları her zaman ile $
başlar. Uygulama günlüğü başvurusunu adlı $AppLog
bir değişkende depolamak istiyorsanız değişkenin adını ve ardından eşittir işaretini 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 yazarsanız $AppLog
, Uygulama günlüğünü içerdiğini görebilirsiniz:
$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 yapabilir. Uzak bilgisayardaki Uygulama günlüğüne erişmek için hem günlük adını hem de bilgisayar adını (veya IP adresini) bağımsız değişken olarak sağlamanız gerekir.
$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 $RemoteAppLog
depolanan bir olay günlüğüne başvurumuz olduğuna göre, bu değişkende hangi görevleri gerçekleştirebiliriz?
Nesne yöntemleriyle olay günlüğünü temizleme
Nesneler genellikle görevleri gerçekleştirmek için çağrılabilen yöntemlere sahiptir. Bir nesneyle ilişkili yöntemleri görüntülemek için kullanabilirsiniz Get-Member
. Aşağıdaki komut ve seçili çı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...
Clear()
yöntemi, olay günlüğünü temizlemek için kullanılabilir. Bir yöntemi çağırırken, yöntem bağımsız değişken gerektirmese bile yöntem adını her zaman parantezlere göre izlemeniz gerekir. Bu, PowerShell'in yöntemiyle aynı ada sahip olası bir özelliği ayırt etmesine olanak tanır. Clear yöntemini çağırmak için aşağıdakileri yazın:
$RemoteAppLog.Clear()
$RemoteAppLog
Max(K) Retain OverflowAction Entries Name
------ ------ -------------- ------- ----
512 7 OverwriteOlder 0 Application
Olay günlüğünün temizlendiğine ve artık 262 yerine 0 girişe sahip olduğuna dikkat edin.
New-Object ile COM nesneleri oluşturma
Bileşen Nesne Modeli (COM) bileşenleriyle çalışmak için kullanabilirsiniz New-Object
. Bileşenler, Windows Betik Konağı'na (WSH) dahil edilen çeşitli kitaplıklardan çoğu sistemde yüklü olan Internet Explorer gibi ActiveX uygulamalarına kadar değişir.
New-Object
COM nesneleri oluşturmak için .NET Framework Runtime-Çağrılabilen Sarmalayıcılar kullanır, bu nedenle .NET Framework'ün COM nesnelerini çağırırken yaptığı sınırlamalarla aynı sınırlamalara sahiptir. COM nesnesi oluşturmak için, kullanmak istediğiniz COM sınıfının Programlı Tanımlayıcısı veya ProgId değeriyle ComObject parametresini belirtmeniz gerekir. COM kullanımı sınırlamalarının tam bir tartışması ve sistemde hangi ProgId'lerin kullanılabilir olduğunu belirleme, bu kullanıcı kılavuzunun kapsamı dışındadır, ancak WSH gibi ortamlardaki en iyi bilinen nesneler PowerShell'de kullanılabilir.
WScript.Shell, WScript.Network, Scripting.Dictionary ve Scripting.FileSystemObject değerlerini belirterek WSH nesnelerini oluşturabilirsiniz. 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'de başka yollarla kullanılabilir hale getiriliyor olsa da, kısayol oluşturma gibi birkaç görevi WSH sınıflarını kullanarak yapmak hala daha kolaydır.
WScript.Shell ile masaüstü kısayolu oluşturma
COM nesnesiyle hızlı bir şekilde gerçekleştirilebilecek görevlerden biri kısayol oluşturmaktır. Masaüstünüzde PowerShell'in giriş klasörüne bağlanan bir kısayol oluşturmak istediğinizi varsayalım. İlk olarak adlı $WshShell
bir değişkende depoladığımız WScript.Shell'e bir başvuru oluşturmanız gerekir:
$WshShell = New-Object -ComObject WScript.Shell
Get-Member
com nesneleri ile çalışır, böylece 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
, öğesine giriş sağlamak için piping yerine kullanabileceğiniz isteğe bağlı bir InputObject parametresine Get-Member
sahiptir. Bunun yerine Get-Member -InputObject $WshShell komutunu kullandıysanız, yukarıda gösterildiği gibi aynı çıktıyı alırsınız. InputObject kullanırsanız bağımsız değişkenini tek bir öğe olarak değerlendirir. Bu, değişkende birkaç nesneniz varsa bunları Get-Member
bir nesne dizisi olarak değerlendirdiği 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, oluşturulacak kısayol dosyasının yolu olan tek bir bağımsız değişkeni kabul eder. Masaüstünün tam yolunu yazabiliriz, ancak bunun daha kolay bir yolu vardır. Masaüstü normalde geçerli kullanıcının giriş klasörünün içinde Masaüstü adlı bir klasörle temsil edilir. Windows PowerShell'de bu klasörün yolunu içeren bir değişken $HOME
vardır. Bu değişkeni kullanarak giriş klasörünün yolunu belirtebilir ve ardından masaüstü klasörünün adını ve oluşturulacak kısayolun adını yazarak ekleyebiliriz:
$lnk = $WshShell.CreateShortcut("$HOME\Desktop\PSHome.lnk")
Çift tırnak içinde değişken adı gibi görünen bir şey kullandığınızda, PowerShell eşleşen bir değeri kullanmaya çalışır. Tek tırnak kullanıyorsanız PowerShell değişken değerini değiştirmeyi 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 içeren adlı $lnk
bir değişkenimiz var. Üyelerini görmek istiyorsanız, öğesine Get-Member
kanal oluşturabilirsiniz. Aşağıdaki çıkış, kısayolumuzu oluşturmayı tamamlamak için kullanmamız gereken üyeleri gösterir:
$lnk | Get-Member
TypeName: System.__ComObject#{f935dc23-1cf0-11d0-adb9-00c04fd58a0b}
Name MemberType Definition
---- ---------- ----------
...
Save Method void Save ()
...
TargetPath Property string TargetPath () {get} {set}
PowerShell'in uygulama klasörü olan TargetPath'i belirtmemiz ve ardından yöntemini çağırarak kısayolu Save
kaydetmemiz gerekir. PowerShell uygulama klasörü yolu değişkeninde $PSHome
depolanır, bu nedenle şunu yazarak bunu yapabiliriz:
$lnk.TargetPath = $PSHome
$lnk.Save()
PowerShell'den Internet Explorer kullanma
Microsoft Office uygulama ailesi ve Internet Explorer dahil olmak üzere birçok uygulama COM kullanılarak otomatikleştirilebilir. Aşağıdaki örneklerde, COM tabanlı uygulamalarla çalışmayla ilgili bazı tipik teknikler ve sorunlar gösterilmektedir.
Internet Explorer ProgId, InternetExplorer.Application belirterek bir Internet Explorer örneği oluşturursunuz:
$ie = New-Object -ComObject InternetExplorer.Application
Bu komut Internet Explorer'ı başlatır, ancak görünür yapmaz. yazarsanız Get-Process
adlı iexplore
bir işlemin çalıştığını görebilirsiniz. Aslında, PowerShell'dan çıkarsanız işlem çalışmaya devam eder. İşlemi sonlandırmak iexplore
için bilgisayarı yeniden başlatmanız veya Görev Yöneticisi gibi bir araç kullanmanız gerekir.
Not
Genellikle ActiveX yürütülebilir dosyaları olarak adlandırılan ayrı işlemler olarak başlayan COM nesneleri, başlatıldığında bir kullanıcı arabirimi penceresi görüntüleyebilir veya görüntülemeyebilir. Bir pencere oluşturur ancak Internet Explorer gibi görünür hale getirmezlerse, odak genellikle Windows masaüstüne taşınır. Pencereyle etkileşimde bulunmak için pencereyi görünür hale getirmeniz gerekir.
yazarak $ie | Get-Member
Internet Explorer özelliklerini ve yöntemlerini görüntüleyebilirsiniz. Internet Explorer penceresini görmek için şunu yazarak Visible özelliğini $true
olarak ayarlayın:
$ie.Visible = $true
Ardından yöntemini kullanarak Navigate
belirli bir Web adresine gidebilirsiniz:
$ie.Navigate("https://devblogs.microsoft.com/scripting/")
Internet Explorer nesne modelinin diğer üyelerini kullanarak, Web sayfasından metin içeriği 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
Internet Explorer'ı PowerShell'in içinden kapatmak için yöntemini çağırın Quit()
:
$ie.Quit()
Değişken $ie
, com nesnesi gibi görünse bile artık geçerli bir başvuru içermiyor. Kullanmayı denerseniz PowerShell bir otomasyon hatası döndürür:
$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 <<<<
gibi $ie = $null
bir komutla kalan başvuruyu kaldırabilir veya yazarak değişkeni tamamen kaldırabilirsiniz:
Remove-Variable ie
Not
Bir başvuruyu kaldırdığınızda ActiveX yürütülebilir dosyalarından çıkılıp çıkılmayacağı veya çalışmaya devam edilmeyeceği konusunda yaygın bir standart yoktur. Uygulamanın görünür olup olmadığı, düzenlenen bir belgenin çalışıp çalışmadığı ve PowerShell'in hala çalışıp çalışmadığı gibi koşullara bağlı olarak uygulamadan çıkılabilir veya olmayabilir. Bu nedenle, PowerShell'de kullanmak istediğiniz her ActiveX yürütülebilir dosyası için sonlandırma davranışını test etmelisiniz.
.NET Framework sarmalanmış COM nesneleri hakkında uyarılar alma
Bazı durumlarda, bir COM nesnesinin tarafından New-Object
kullanılan ilişkili bir .NET Framework Runtime-Callable Wrapper (RCW) olabilir. RCW'nin davranışı normal COM nesnesinin davranışından farklı olabileceğinden, New-Object
RCW erişimi konusunda sizi uyarmak için Strict parametresi vardır. Strict parametresini belirtir ve ardından 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 interop assembly. If
this type exposes different members than the IDispatch members , scripts written to work with this
object might not work if the primary interop assembly isn't installed. At line:1 char:17 + $xl =
New-Object <<<< -ComObject Excel.Application -Strict
Nesne hala oluşturulmuş olsa da, standart bir COM nesnesi olmadığı konusunda uyarılırsınız.
PowerShell