You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本块内变量无法传递至外部函数的问题

问题分析与修复

你的核心问题是远程会话与本地会话的变量作用域完全隔离,远程脚本块里的$script:sdate属于远程机器的脚本作用域,本地会话根本访问不到,所以传给writeToServer的是无效值。

修复步骤

  • 让Invoke-Command直接返回远程机器的计算机名和时间,本地接收返回结果
  • 移除远程脚本块里的无效变量赋值,改用返回值传递数据
  • 确保writeToServer接收的是远程返回的有效数据

修正后的代码

# Function to manipulate the data
Function writeToServer
{
  param($server, $Time)

  # Data preparation for loading data into SQL table 
  $InsertResults = @"
  INSERT INTO [ServerTimeSync].[dbo].[ServerTimes](SystemName,ShownTimeOnServer)
  VALUES ('$server','$Time')
  "@      
  # Call the invoke-sqlcmdlet to execute the query
  Invoke-sqlcmd @params -Query $InsertResults
}

foreach ($COMPUTER in $COMPUTERS){ 
  # 远程执行并返回结果:计算机名和格式化后的时间
  $remoteData = Invoke-Command -ComputerName $COMPUTER -ScriptBlock {
    [PSCustomObject]@{
      ComputerName = $ENV:COMPUTERNAME
      ServerTime = Get-Date -Format "MM-dd-yyyy hh:mm:ss tt"
    }
  }

  # 将远程返回的数据传入函数
  writeToServer -server $remoteData.ComputerName -Time $remoteData.ServerTime
}

关键说明

  • 远程脚本块返回一个自定义对象,包含需要的两个字段,本地通过$remoteData接收
  • 不再尝试跨会话访问变量,而是利用Invoke-Command的返回值传递数据,这是PowerShell远程处理的标准方式
  • 统一了变量大小写(原代码参数用$server,SQL语句里用$SERVER,虽然PowerShell不区分大小写,但保持一致更规范)

内容的提问来源于stack exchange,提问作者Edgar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:42:12