【发布时间】:2020-10-09 07:48:34
【问题描述】:
开始使用 PowerShell 脚本管理服务器...
我在笔记本电脑上安装了 VSCODE + PowerShell 扩展。
我将我的 WSMAN 受信任列表设置为 *
并运行以下脚本(例如,使用 F5 键)假设停止远程机器中的服务:
$computers = "IP ADDRESS"
[string] $domainAdminUserName = "USERNAME"
[string] $domainAdminPlainPassword = "PASSWORD"
$securePassword = $domainAdminPlainPassword | ConvertTo-SecureString -AsPlainText -Force
$credentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $domainAdminUserName, $securePasswordEnter-PSSession -Computer $computers -Credential $credentials
$svcSQL = Get-WmiObject -Class Win32_Service -Computer $computers -Credential $credentials -Filter "Name='MSSQLSERVER'"
$svcSQLAgent = Get-WmiObject -Class Win32_Service -Computer $computers -Credential $credentials -Filter "Name='SQLSERVERAGENT'"
$svcOLAP = Get-WmiObject -Class Win32_Service -Computer $computers -Credential $credentials -Filter "Name='MSSQLServerOLAPService'"
Invoke-Command -Computer $computers -Credential $credentials -ScriptBlock {Get-WmiObject -Class Win32_Service | Where-Object {$_.name -eq $svcSQL} | Stop-Service -Force}
Invoke-Command -Computer $computers -Credential $credentials -ScriptBlock {Get-WmiObject -Class Win32_Service | Where-Object {$_.name -eq $svcOLAP} | Stop-Service}
Exit-PSSession
服务没有停止
然后,我进入 PowerShell 集成控制台并执行以下命令:
PS> Enter-PSSession -Computer "IP ADDRESS" -Credential "DOMAIN ADMIN USER"
PS> PASSWORD: ******
PS [IP ADDRESS]> Get-Service -Name "MSSQLSERVER"
PS [IP ADDRESS]> PowerShell found the service
PS [IP ADDRESS]> Stop-Service -Name "MSSQLSERVER"
服务已成功停止
如何解决问题以运行脚本并获得预期结果?
注意:
- PC:我的电脑(WIN 10 在一个域中(家庭)
- VM:我的远程实验室机器(WIN 2016 在另一个域中(工作)
- PC:要远程访问我的实验室,我需要使用 VPN 应用
- PC:我的 WSMan
Trusted List = * - VM:WinRM 正在我的远程实验室中运行(GPO:Windows 远程管理(WS-Management(启动模式 = 自动))
- VM:端口 5985 已打开,5986 未打开
- PC 和 VM:
Set-ExecutionPolicy Unrestricted在客户端和服务器中没有帮助
【问题讨论】:
-
删除
[ValidateNotNullOrEmpty()]。这些旨在与参数一起使用,而不是简单地在代码中声明变量。如果参数是您想要的,请将前三行放在Param(..)块中 -
@Theo。感谢您的评论。修复了代码块及其工作,没有错误。
-
很高兴听到这个消息。干得好!
-
@Theo - 现在主要问题 - 你知道如何解决这个问题吗?是否需要对 VSCODE 进行任何配置以使其与通常的 Windows PowerShell 一样工作?
-
我猜 Powershell 编辑器比 VsCode 更宽容。我认为您不应该尝试在 VsCode 接受不遵循语法规则的代码方面做出任何努力。只需在参数上使用
[Validate*],而不是在变量创建中。
标签: powershell visual-studio-code