1

目前我有跟随 ps 读取用户名列表然后回显它。

用户名文件如下

username1
username2
username3

ps脚本如下

$userNames = (Get-Content usernames.txt)# | Sort-Object
$userID=0
$userNames.Count
echo "FROM table WHERE (userID ='"
For ($i =1; $i -le ($userNames.Count - 1); $i++)
{
echo $userNames[$userID] "' OR userID='"
$userID++
}
echo $userNames[$userNames.Count - 1] "'"

我希望能在同一行上回显(并最终写入文本文件)。

FROM table WHERE (userID = 'username1' OR userID = 'username2' OR userID = 'username3'

我将如何解决这个问题?

4

1 回答 1

6

您正在寻找的是:

Write-Host "Blah" -NoNewLine

我可能会像这样重写脚本以避免不得不使用For...Loop

$userNames = (Get-Content usernames.txt) | Sort-Object
$count = 0

Write-Host "FROM table WHERE (" -NoNewLine

$userNames |% {
    Write-Host "userID='$_'" -NoNewLine

    if(++$count -ne $userNames.Length){
        Write-Host " OR " -NoNewLine
    }
    else {
        Write-Host ")"
    }
}

该脚本还将利用 PowerShell 的另一个不错的功能,即字符串文字中的变量替换。For-EachObject在迭代过程中自动设置$_为当前对象,PowerShell 将自动解析字符串文字中的变量并替换它们的值。

另外......我刚刚意识到整个事情可以简化为以下内容:

$userNames = (Get-Content usernames.txt) | Sort-Object |% { "'$_'" }

Write-Host "FROM table WHERE UserID in ($([String]::Join(",",$userNames)))"

这将产生以下查询:

FROM table WHERE UserID in ('username1','username2','username3')

在我看来,这是一个更令人愉快的脚本和查询:)

于 2012-04-06T15:30:33.093 回答