首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell多个IF语句

Powershell多个IF语句
EN

Stack Overflow用户
提问于 2022-06-01 18:59:10
回答 2查看 75关注 0票数 0

我正在尝试创建一个powershell脚本,该脚本可以执行以下操作:

1-通过已安装的xml文件对设备上的Get-Group进行筛选.

只有当组等于Get-Group时才执行复制函数。

到目前为止,我成功地将第一个或最后一个文件复制到一个不正确的设备上。我相信你只能用2个如果声明一个powershell脚本?如果是这样的话,我怎样才能达到我所期望的结果呢?我也在没有joy的情况下尝试过ElseIF、tried、Switch和WhatIF。我也尝试过不同的论据来支持IF声明。-eq,=,-like和-match。在这种情况下,它们似乎都没有太大的帮助。

代码语言:javascript
复制
$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"}
EN

回答 2

Stack Overflow用户

发布于 2022-06-01 19:06:29

在执行$Group函数期间向Get-Group分配的任务对脚本的其余部分不可见。您可以让函数返回值,然后将其赋值给函数外部的$Group,如下所示:

代码语言:javascript
复制
Function Get-Group
{return ([xml](Get-Content D:\Tools\SystemInformation\SystemInformation.xml)).'system-information'.'device-group'}

$Group = Get-Group

或者,在函数内的赋值中使用范围修饰符使其对整个脚本可见:

代码语言:javascript
复制
Function Get-Group
{ $Script:Group = ([xml](Get-Content D:\Tools\SystemInformation\SystemInformation.xml)).'system-information'.'device-group'}

Get-Group

或者,如果您不需要其他地方的函数,只需像这样直接分配$Group (在脚本范围内):

代码语言:javascript
复制
$Group = ([xml](Get-Content D:\Tools\SystemInformation\SystemInformation.xml)).'system-information'.'device-group'

参见帮助文档"范围“(即运行help about_Scopes)。

票数 3
EN

Stack Overflow用户

发布于 2022-06-02 14:29:32

我会将Get-Group函数更改为使用

代码语言:javascript
复制
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“+数字值+”主“,则可以这样做:

代码语言:javascript
复制
$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文件的路径相匹配。

代码语言:javascript
复制
$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'"
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72466841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档