我目前正在為 Windows 編寫一項服務,並且經常調整它並將其更新到我的測試電腦上。我想編寫一個腳本來自動停止服務,更新exe並重新啟動服務。然而,我遇到麻煩的是停止和開始部分。
我連接的電腦不在網域中,我們不共享使用者名稱和密碼。我認為我最好的選擇是這樣做sc.exe \\testsvr stop "myService"
,但是因為我沒有網域或共享使用者名稱和密碼,這給了我一個「訪問被拒絕」訊息。
我可以非常輕鬆地添加用戶,但當我無法更改用戶時,我希望將其作為學習體驗。
答案1
我會看一下服務來自 Microsoft 的 Sysinternals(它是 Mark Russinovich 編寫的優秀工具集的一部分)。
直接來自網站:
Usage: psservice [\\computer [-u username] [-p password]] <command> <options>
對於<command>
,您可以使用start
、stop
、 或restart
作為最常見的選項。該腳本的優點在於,它不依賴兩台電腦是同一網域的成員或具有任何其他信任。
答案2
為了完整起見,如果您只想使用現有的 Windows 工具來執行此操作,您可以先建立到遠端電腦的 IPC 連線(以在該電腦上建立安全性令牌),然後使用「SC」命令:
net use \\remote\IPC$ /user:local-username-on-remote-machine passowrd
sc \\remote stop service-name
net use \\remote\IPC$ /delete
這將允許您控制遠端電腦上的服務,而不管兩台電腦的工作群組/網域成員資格的組合如何。
答案3
從未親自在非網域配置中嘗試過它,但也許使用“RunAs”運行 SC.exe 並使用目標計算機的憑證?
Runas /user:TargetComputerName\TargetAccountName "sc.exe \\testsvr stop ""myService"""
答案4
在 DOMAIN 環境中,您可以使用 NET USE 命令,前提是已授予執行腳本的登入使用者適當的使用者權限。 PowerShell 可能是您擁有的最強大的選項,但如果您執行的是較舊的 Microsoft 作業系統,則在執行某些 PowerShell 命令時可能會遇到一些問題。如果一切都是 Windows 2008 或更新版本,我肯定會選擇 PowerShell。
如果這不是一個選擇,我已經使用 PSTools 套件取得了巨大的成功。如果您確實選擇此選項,正如 Evan 之前提到的,您可能應該熟悉同一包中的 pskill 實用程式。當您遠端處理某些服務時,它們不會優雅地終止,而這個小實用程式非常適合終止它們。
出於好奇,您用什麼腳本語言編寫此程式碼? VB腳本?批?珀爾?