Powershell.从命令提示符调用文件



我如何调用它以正确的方式工作。

test.ps1

function Check($file)
{
Write-Output "In function"
$test = Get-Content -Path $file |ConvertFrom-json
foreach ($line in $test)
{
if($line.1111111111 = "true")
{
$line.1111111111 = "false"
Write-Output "This  is: 1111111111 and is now false"
}

if($line.1111111111 = "false")
{
Write-Output "Inside second"
}
}
}

settings.json

{
"1111111111": true,
"2222222222": true
}

所以我想在像这样的powershell中调用它

/test.ps1检查-文件C:\settings.json

但是我不能让它工作。我做错了什么?

还有没有一种方法可以在不知道111111111的名字的情况下读取它的名字,就像在这种情况下一样?

关于您的疑问:

还有没有一种方法可以在不知道111111111的名称的情况下读取它,就像在这种情况下一样?

您可以访问对象的PSObject.Properties以了解其属性名称和值,如下所示。

至于你的条件陈述:

if($line.1111111111 = "true") { .. }
# and 
if($line.1111111111 = "false") { .. }

您应该知道=是一个赋值运算符,为了进行相等比较,您应该使用-eq-ceq(区分大小写(。

下面是一个如何调用脚本并传入Json的示例,在这种情况下,我认为不需要函数。

注意,如果Json的结果是一个数组,这应该可以工作,但是如果它有嵌套的属性,这些属性是数组,这将无法正常工作。

使用test.json作为示例:

[{
"1111111111": true,
"2222222222": true
},
{
"3333333333": false,
"4444444444": true
}]

你可以这样运行脚本:

# Assuming script.ps1 and test.json are on the folder where we're located
PS /> $newJson = .script.ps1 .test.json
In script
This is: 1111111111 and is now false
This is: 2222222222 and is now false
This is: 3333333333 and was not updated
This is: 4444444444 and is now false
PS /> $newJson
[
{
"1111111111":  false,
"2222222222":  false
},
{
"3333333333":  false,
"4444444444":  false
}
]

脚本.ps1

[cmdletbinding()]
param([string]$file)
Write-Host "In script"
$absolutePath = Convert-Path $file
$json = Get-Content -Path $absolutePath | ConvertFrom-Json
foreach ($object in $json)
{
foreach($prop in $object.PSObject.Properties)
{
if($prop.Value -eq $true) # Could be reduced to just `if($prop.Value)`
{
$prop.Value = $false
Write-Host "This is: $($prop.Name) and is now false"
}
else
{
Write-Host "This is: $($prop.Name) and was not updated"
}
}
}
$json | ConvertTo-Json

相关内容

  • 没有找到相关文章

最新更新