【问题标题】:VSCode Running PowerShell script VS each command separately produces different resultsVSCode 运行 PowerShell 脚本 VS 每个命令分别产生不同的结果
【发布时间】: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"

服务已成功停止

如何解决问题以运行脚本并获得预期结果?


注意:

  1. PC:我的电脑(WIN 10 在一个域中(家庭)
  2. VM:我的远程实验室机器(WIN 2016 在另一个域中(工作)
  3. PC:要远程访问我的实验室,我需要使用 VPN 应用
  4. PC:我的 WSMan Trusted List = *
  5. VM:WinRM 正在我的远程实验室中运行(GPO:Windows 远程管理(WS-Management(启动模式 = 自动))
  6. VM:端口 5985 已打开,5986 未打开
  7. PC 和 VM:Set-ExecutionPolicy Unrestricted 在客户端和服务器中没有帮助

【问题讨论】:

  • 删除[ValidateNotNullOrEmpty()]。这些旨在与参数一起使用,而不是简单地在代码中声明变量。如果参数是您想要的,请将前三行放在 Param(..) 块中
  • @Theo。感谢您的评论。修复了代码块及其工作,没有错误。
  • 很高兴听到这个消息。干得好!
  • @Theo - 现在主要问题 - 你知道如何解决这个问题吗?是否需要对 VSCODE 进行任何配置以使其与通常的 Windows PowerShell 一样工作?
  • 我猜 Powershell 编辑器比 VsCode 更宽容。我认为您不应该尝试在 VsCode 接受不遵循语法规则的代码方面做出任何努力。只需在参数上使用[Validate*],而不是在变量创建中。

标签: powershell visual-studio-code


【解决方案1】:

我只是在学习,但有一个类似的问题,当我添加这个时解决了:

PS>  Set-ExecutionPolicy Unrestricted

Visual studio code terminal, how to run a command with administrator rights?

【讨论】:

    【解决方案2】:

    终于问题解决了:l在网络适配器> IPv4属性的DNS后缀列表中添加域名作为后缀

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-19
      • 2022-09-01
      • 2019-11-26
      • 1970-01-01
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多