我正在尝试创建一个powershell脚本,该脚本可以执行以下操作:
1-通过已安装的xml文件对设备上的Get-Group进行筛选.
只有当组等于Get-Group时才执行复制函数。
到目前为止,我成功地将第一个或最后一个文件复制到一个不正确的设备上。我相信你只能用2个如果声明一个powershell脚本?如果是这样的话,我怎样才能达到我所期望的结果呢?我也在没有joy的情况下尝试过ElseIF、tried、Switch和WhatIF。我也尝试过不同的论据来支持IF声明。-eq,=,-like和-match。在这种情况下,它们似乎都没有太大的帮助。
$ActiveFilePath = "C:\ProgramData\JKCS\jkupdate\jku.ini"
Function Get-Group
{$Group = ([xml](Get-Content D:\Tools\SystemInformation\SystemInformation.xml)).'system-information'.'device-group'}
Get-Group
If ($Group -eq "XXXXX101Master")
{Copy-Item ".\JKU Files\101\jku.ini" "$ActiveFilePath"}
#----------------------------------------------#
If ($Group -eq "XXXXX102Master")
{Copy-Item ".\JKU Files\102\jku.ini" "$ActiveFilePath"}
#----------------------------------------------#
If ($Group -eq "XXXXX103Master")
{Copy-Item ".\JKU Files\103\jku.ini" "$ActiveFilePath"}
#----------------------------------------------#
If ($Group -eq "XXXXX104Master")
{Copy-Item ".\JKU Files\104\jku.ini" "$ActiveFilePath"}
#----------------------------------------------#
If ($Group -eq "XXXXX105Master")
{Copy-Item ".\JKU Files\105\jku.ini" "$ActiveFilePath"}
#----------------------------------------------#
If ($Group -eq "XXXXX106Master")
{Copy-Item ".\JKU Files\106\jku.ini" "$ActiveFilePath"}发布于 2022-06-01 19:06:29
在执行$Group函数期间向Get-Group分配的任务对脚本的其余部分不可见。您可以让函数返回值,然后将其赋值给函数外部的$Group,如下所示:
Function Get-Group
{return ([xml](Get-Content D:\Tools\SystemInformation\SystemInformation.xml)).'system-information'.'device-group'}
$Group = Get-Group或者,在函数内的赋值中使用范围修饰符使其对整个脚本可见:
Function Get-Group
{ $Script:Group = ([xml](Get-Content D:\Tools\SystemInformation\SystemInformation.xml)).'system-information'.'device-group'}
Get-Group或者,如果您不需要其他地方的函数,只需像这样直接分配$Group (在脚本范围内):
$Group = ([xml](Get-Content D:\Tools\SystemInformation\SystemInformation.xml)).'system-information'.'device-group'参见帮助文档"范围“(即运行help about_Scopes)。
发布于 2022-06-02 14:29:32
我会将Get-Group函数更改为使用
function Get-Group {
# if you load the xml file this way, you are ensured to get the file encoding correct
$xml = [System.Xml.XmlDocument]::new()
$xml.Load('D:\Tools\SystemInformation\SystemInformation.xml')
$xml.'system-information'.'device-group'
}然后,如果您的所有组都具有相同格式的"XXXXX“+数字值+”主“,则可以这样做:
$group = Get-Group
$subfolder = [regex]::Match($group, '(\d+)Master$').Groups[1].Value
if (![string]::IsNullOrWhiteSpace($subfolder)) {
$path = Join-Path '.\JKU Files' -ChildPath ('{0}\jku.ini' -f $subfolder)
Copy-Item -Path $path -Destination $ActiveFilePath
}
else {
Write-Warning "Could not find a matching subfolder name in '$group'"
}否则,如果组名做而不是都具有相同的格式,我建议创建一个查找哈希表,在这里您可以将组名与ini文件的路径相匹配。
$lookup = @{
'XXXXX101Master' = 101
'XYZ102Demo' = 102
'103Copy' = 103
'X123456789104Huh' = 104
# etc.
}
$group = Get-Group
if ($lookup.ContainsKey($group)) {
$subfolder = $lookup[$group]
$path = Join-Path '.\JKU Files' -ChildPath ('{0}\jku.ini' -f $subfolder)
Copy-Item -Path $path -Destination $ActiveFilePath
}
else {
Write-Warning "Could not find a matching subfolder name in '$group'"
}https://stackoverflow.com/questions/72466841
复制相似问题