Powershell删除ForEach结果周围的空间

Powershell删除ForEach结果周围的空间,powershell,Powershell,我目前正在尝试开发一个PowerShell脚本,该脚本生成一个包含SQL语句的输出文本文件。我确信还有其他的方法可以做到这一点,但我身处一个奇怪的环境中,我相信这将以最快的速度得到我需要的东西。我正在尝试生成用于MS Access的SQL语句 我正在使用PowerShell ISE创建,到目前为止,我所拥有的是: $taskerIDs = Import-Csv C:\test.csv ForEach ($row in $taskerIDs){write-host "SELECT Help_Dat

我目前正在尝试开发一个PowerShell脚本,该脚本生成一个包含SQL语句的输出文本文件。我确信还有其他的方法可以做到这一点,但我身处一个奇怪的环境中,我相信这将以最快的速度得到我需要的东西。我正在尝试生成用于MS Access的SQL语句

我正在使用PowerShell ISE创建,到目前为止,我所拥有的是:

$taskerIDs = Import-Csv C:\test.csv
ForEach ($row in $taskerIDs){write-host "SELECT Help_Data_List.Sites,"$row.ID"FROM Help_Data_List LEFT JOIN [TASKORD-"$row.ID"] ON Help_Data_List.[Sites] = [TASKORD-"$row.ID"].[Site Name] WHERE ((([TASKORD-"$row.ID"].[Site Name]) Is Null));"}
我这样做是因为我在CSV中有大约50行,我需要在写主机行中替换列出的ID

输出到屏幕返回以下内容:

SELECT Help_Data_List.Sites, 12-0371 FROM Help_Data_List LEFT JOIN [TASKORD- 12-0371 ] ON Help_Data_List.[Sites] = [TASKORD- 12-0371 ].[Site Name] WHERE ((([TASKORD- 12-0371 ].[Site Name]) Is
 Null));

当您查看结果时,它会显示[TASKORD-12-0371],如果我希望它是[TASKORD-12-0371]

因为您想访问字符串中变量的属性,您需要使用子表达式
$()
进行字符串插值,而不是使用多个双引号:

# ....    
write-host "SELECT Help_Data_List.Sites,$($row.ID)FROM Help_Data_List LEFT JOIN [TASKORD-$($row.ID)] ON Help_Data_List.[Sites] = [TASKORD-$($row.ID)].[Site Name] WHERE ((([TASKORD-$($row.ID)].[Site Name]) Is Null));"
# ....
不要像这样“构造”输出字符串:

"SELECT Help_Data_List.Sites,"$row.ID"FROM Help_D..."
字符串文本和
$row.ID
条目基本上被解释为单个字符串,
Write Host
将在它们之间添加空格

而是使用(
-f
):

将表达式放在括号中,以便
Write Host
获取扩展字符串:

Write-Host ("SELECT Help_Data_List.Sites,{0} FROM Help_Data_List LEFT JOIN [TASKORD-{0}] ON Help_Data_List.[Sites] = [TASKORD-{0}].[Site Name] WHERE ((([TASKORD-{0}].[Site Name]) Is Null));" -f $row.ID)

谢谢你的链接。我会检查和更新,但这似乎是我需要的。上面的答案我做了标记,因为它让我得到了我需要立即发布的报告:)。我可能还会使用一个格式字符串,两者都可以。
Write-Host ("SELECT Help_Data_List.Sites,{0} FROM Help_Data_List LEFT JOIN [TASKORD-{0}] ON Help_Data_List.[Sites] = [TASKORD-{0}].[Site Name] WHERE ((([TASKORD-{0}].[Site Name]) Is Null));" -f $row.ID)