Saya memiliki jaringan dengan server windows 2003, 2008 dan 2008r2. Saya memiliki skrip PowerShell yang saya tulis untuk menambal mesin lokal menggunakan objek com "Microsoft.Update". (Mirip dengan Windows Update PowerShell Remoting .) Skrip saya berfungsi secara lokal, tetapi saya ingin menggunakan fungsinya dari jarak jauh karena saya memiliki sejumlah server yang cukup untuk dikelola. Dalam hal itu jatuh (mirip dengan posting lain itu, yang tidak diselesaikan).
Namun saya dapat mempersempit kegagalan menjadi dua metode pada kelas tertentu.
(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateDownloader()
(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateInstaller()
Jika Anda menjalankan ini di PowerShell secara lokal sebagai admin, Anda tidak akan memiliki masalah. Jika Anda mencoba menggunakan perintah invoke (atau masuk sesi, atau winrs) Anda akan mendapatkan kesalahan berikut. (Ini sedang diuji dengan localhost, tetapi host mana pun akan melakukannya. Saya juga mencoba dengan metode otentikasi yang berbeda seperti credssp dan kerberos.);
PS C:\> Invoke-Command -ComputerName localhost -ScriptBlock { (New-Object -ComObject "microsoft.update.session").createUpdateDownloader()}
Exception calling "CreateUpdateDownloader" with "0" argument(s): "Access is denied. (Exception from HRESULT: 0x80070005
(E_ACCESSDENIED))"
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
Saya telah melihat ini disebutkan di blog sebagai bug, tetapi tanpa cadangan untuk klaim itu. Ada dua solusi dan keduanya tidak membuat saya bahagia.
- Gunakan psexec untuk menjalankan perintah sebagai pengguna sistem. PSExec adalah apa yang saya coba untuk tidak digunakan karena terbukti tidak dapat diandalkan. Saya juga ingin solusi PowerShell murni.
- Buat tugas terjadwal dan katakan itu untuk menjalankan skrip Anda sebagai pengguna sistem. (melalui posnya ) Ini tidak hanya berantakan tetapi kemudian saya tidak akan mendapatkan hasil pembaruan. Saya harus masuk ke file atau memperbarui database atau sesuatu.
Saya terbuka untuk cara-cara lain untuk menjalankan pembaruan pada host dari jarak jauh karena ini tampaknya menjadi masalah yang banyak orang tolak.
Saya menemukan beberapa dokumen yang menjelaskan pesan tetapi bukan alasan atau solusinya.
Nilai Pengembalian Mengembalikan S_OK jika berhasil. Jika tidak, kembalikan kode kesalahan COM atau Windows.
This method can also return the following error codes. Return code Description E_INVALIDARGA parameter value is invalid. E_ACCESSDENIED This method cannot be called from a remote computer.
Bagaimana saya tahu saya menggunakan komputer jarak jauh?