powershell - PS 对象转义字符
问题描述
运行代码时出现小错误。我为自定义对象分配了一个字符串,但它自己解析字符串并引发错误。
代码:
foreach ($item in $hrdblistofobjects) {
[string]$content = Get-Content -Path $item
[string]$content = $content.Replace("[", "").Replace("]", "")
#here is line 43 which is shown as error as well
foreach ($object in $listofitemsdb) {
$result = $content -match $object
$OurObject = [PSCustomObject]@{
ObjectName = $null
TestObjectName = $null
Result = $null
}
$OurObject.ObjectName = $item
$OurObject.TestObjectName = $object #here is line 52 which is other part of error
$OurObject.Result = $result
$Resultsdb += $OurObject
}
}
此代码加载项目并检查项目中是否存在对象。基本上,如果字符串部分存在于字符串部分中,然后将结果保存到变量中。我正在将此代码用于其他对象和项目,但它们没有\p
我认为是问题的那部分。出于明显的原因,我不能将 $object 放在单引号中(这是在互联网上建议的,但在我的情况下这是不可能的)。那么还有其他选择如何取消转义\p
吗?我试过 $object.Replace("\PMS","\\PMS")
了,但这也没有用(这也有人建议过)。
编辑:
$Resultsdb = @(foreach ($item in $hrdblistofobjects) {
[string]$content = Get-Content -Path $item
[string]$content = $content.Replace("[", "").Replace("]", "")
foreach ($object in $listofitemsdb) {
[PSCustomObject]@{
ObjectName = $item
TestObjectName = $object
Result = $content -match $object
}
}
}
)
解决方案
$Resultsdb
未定义为数组,因此当您尝试将一个对象添加到另一个对象但未实现加法运算符时会出现该错误。
无论如何,您不应该在循环中附加到数组。这将表现不佳,因为每次迭代它都会创建一个大小增加一的新数组,复制现有数组中的所有元素,将新元素放入新的空闲槽中,然后用新数组替换原始数组。
更好的方法是只在循环中输出对象并将循环输出收集到一个变量中:
$Resultsdb = foreach ($item in $hrdblistofobjects) {
...
foreach ($object in $listofitemsdb) {
[PSCustomObject]@{
ObjectName = $item
TestObjectName = $object
Result = $content -match $object
}
}
}
如果需要确保结果是数组,则在数组子表达式中运行循环,否则当循环返回的结果少于两个时,它将为空或单个对象。
$Resultsdb = @(foreach ($item in $hrdblistofobjects) {
...
})
请注意,您需要抑制循环中默认输出流上的其他输出,以免污染您的结果。
推荐阅读
- ruby-on-rails - Rails - 从 Paperclip 迁移到 Active Storage
- excel - 复制和粘贴错误导致工作簿崩溃
- matlab - 如何找到数据中值第一次开始减少的数据点,因为这种减少在以下 3 个数据点继续?
- sql - 选择最后一行,但仅当列值是预期值时
- angular - 如果没有带有 nginx conf 的斜杠,Angular 应用程序将无法工作
- sql - 我如何操作一对多配置单元表中相关表的结果的结果
- function - 查询功能逻辑,列求和分组
- c# - 我可以轻松地为单元测试制作 DataTable 数据吗?
- python - ValueError:输入数组应具有与目标数组相同数量的样本。找到 0 个输入样本和 121 个目标样本
- javascript - HTML - javascript有没有办法强制POST来自服务器而不是用户的浏览器