powershell - PowerShell在文件的输入值中转义单引号
问题描述
通过从文件中读取电子邮件地址,在 Active Directory 中查询用户状态。如果电子邮件地址中没有单引号,它可以工作。如果文件有带引号的电子邮件地址user's@example.com
,PowerShell 会给出以下错误消息。
如何在 PowerShell 中转义单引号?
代码
Import-Csv users.csv|
ForEach-Object{
$UserStatus=Get-ADUser -Filter "EmailAddress -eq '$($_.Email)'" -properties "*"| select -Expand userAccountControl
$_ |
Add-Member -MemberType NoteProperty -Name "starts" -Value $UserStatus -PassThru
} |
export-csv added-filed.csv
错误信息
Get-ADUser : Error parsing query: 'EmailAddress -eq 'user's@example.com'' Error Message: 'syntax error' at position: '21'.
At added-active-status.ps1:4 char:17
+ ... $UserStatus=Get-ADUser -Filter "EmailAddress -eq '$($_.Email)'" -prop ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ParserError: (:) [Get-ADUser], ADFilterParsingException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADFilterParsingException,Microsoft.ActiveDirectory.Management.Commands.GetADUser
解决方案
如果这是关于PowerShell 的转义规则,则必须将嵌入的字符加倍。'
在'...'
字符串内:-Filter "EmailAddress -eq '$($_.Email -replace "'", "''")'"
但是,鉴于Get-ADUser
解释参数内容的是 cmdlet(其底层提供程序),-Filter
切换到使用嵌入式"..."
引用可能更安全,在这种情况下使用任何'
字符。在值中$_.Email
不需要转义(假设$_.Email
也没有嵌入"
字符):
Get-ADUser -Filter "EmailAddress -eq `"$($_.Email)`""
推荐阅读
- assembly - 如何在不同的行上打印输出并在 MASM 中显示计数
- php - 运行“撰写要求”后,有什么方法可以显示“下一步”方向吗?
- django-rest-framework - 使用视图集封装相关端点
- javascript - 使用 Google Apps 脚本为 google 文档表自定义边框
- php - 如果路由低一级,则不调用 Blade Parent CSS
- mysql - Entity Framework Core 将 DISTINCT 发送到生成的 SQL 中
- azure - 如何在 TFS 中将模板中的所有字段设为必填?
- node.js - 如何在服务器上运行不同的生产环境?
- sql - 计数时的情况
- spring - 使用 Spring JPA 连接 2 个表