Function 清除变量赢得';不能在函数中工作

Function 清除变量赢得';不能在函数中工作,function,powershell,csv,Function,Powershell,Csv,我怀疑这是一个我不完全理解的隐含/明确的问题。我的很多脚本都涉及从服务器获取信息、用数据填充变量以及将变量写入CSV文件。为此,我使用了一个名为Write CSV的函数: function Write-CSV { $NewLine = "{0},{1},{2} -f $Server,$Data1,$Data2 $NewLine | Add-Content -Path $CSV } 它似乎工作得很好,除了我的服务器列表中的一个服务器处于脱机状态之外。我这样报告事件: $Data1 = "Offl

我怀疑这是一个我不完全理解的隐含/明确的问题。我的很多脚本都涉及从服务器获取信息、用数据填充变量以及将变量写入CSV文件。为此,我使用了一个名为Write CSV的函数:

function Write-CSV {
$NewLine = "{0},{1},{2} -f $Server,$Data1,$Data2
$NewLine | Add-Content -Path $CSV
}
它似乎工作得很好,除了我的服务器列表中的一个服务器处于脱机状态之外。我这样报告事件:

$Data1 = "Offline"; $Data2 = $Null; Write-CSV
发生的情况是,
$Data1
值被保留用于下一个服务器的结果。比如说,我列表中的服务器5离线了。CSV文件的最终外观如下所示:

Server Data1 Data2
...
server4 datapoint1 datapoint2
server5 Offline 
server6 Offline datapoint2
server7 Offline datapoint2
为了防止出现这种情况,我在Write CSV函数的末尾添加了以下行:

clv Data1,Data2 -ErrorAction SilentlyContinue
CLV
Clear变量的别名。我的想法是,当下一个服务器被寻址时,所有变量都将被清除。但是
$Data1
列仍然显示列表其余部分的脱机状态

我在ISE和clv中分别测试了调用每一行的函数。但在脚本中它失败了。最后,我将clv行添加到我的
foreach($serverlist中的server)
循环的末尾,这意味着它在函数之外运行。但如果可能的话,我更希望它成为未来脚本中函数本身的一部分


提前感谢。

我认为您应该只使用函数的参数,这样您就不必担心存在的这个范围问题

对于变量
$Data1
$Data2
,可以安全地假设它们在另一个范围内声明。使用
清除变量
s
-Scope
参数可能就是您需要做的全部工作

Clear-Variable Data1,Data2 -Scope 1 -ErrorAction SilentlyContinue

1
是对父范围的引用。如果这不是声明变量的地方,您也可以使用“全局”。有关更多信息,请参见

这似乎只是一个范围问题。当你这样做的时候会发生什么<代码>清除变量Data1,Data2-范围1-错误操作SilentlyContinue
FYI进行编辑以使CLV更清晰。我第一次读它的时候,我以为你在用CSV打错字。这就成功了,我学到了一些新东西。谢谢,马特。