已经有问题解决我的问题(Can I get && to work in Powershell?),但有一点不同。我需要两个命令的 OUTPUT 。如果我刚开始运行,请参阅:
(command1 -arg1 -arg2) -and (command2 -arg1)
我不会看到任何输出,而是stderr消息。并且,正如所料,只需输入:
command1 -arg1 -arg2 -and command2 -arg1
给出语法错误。
答案 0 :(得分:27)
试试这个:
$(command -arg1 -arg2 | Out-Host;$?) -and $(command2 -arg1 | Out-Host;$?)
$()
是一个子表达式,允许您在包含管道的内部指定多个语句。然后执行命令并管道到Out-Host
,以便您可以看到它。下一个语句(子表达式的实际输出)应输出$?
,即最后一个命令的成功结果。
$?
适用于本机命令(控制台exe),但对于cmdlet,它会留下一些需要的东西。也就是说,当cmdlet遇到终止错误时,$?
似乎只返回$false
。似乎$?
至少需要三种状态(失败,成功和部分成功)。因此,如果您使用的是cmdlet,则效果会更好:
$(command -arg1 -arg2 -ev err | Out-Host;!$err) -and
$(command -arg1 -ev err | Out-Host;!$err)
这种打击仍然存在。也许这样的事情会更好:
function ExecuteUntilError([scriptblock[]]$Scriptblock)
{
foreach ($sb in $scriptblock)
{
$prevErr = $error[0]
. $sb
if ($error[0] -ne $prevErr) { break }
}
}
ExecuteUntilError {command -arg1 -arg2},{command2-arg1}
答案 1 :(得分:3)
简化 doThis ||的多步骤脚本退出1 非常有用,我用的是:
function ProceedOrExit {
if ($?) { echo "Proceed.." } else { echo "Script FAILED! Exiting.."; exit 1 }
}
doThis; ProceedOrExit
doNext
# or for long doos
doThis
ProceedOrExit
doNext
答案 2 :(得分:1)
Bash / cmd
的{{1}}和&&
控制运营商没有PowerShell等效,因为您无法在PowerShell中定义自定义运算符, 没有好的解决方法。
||
的解决方法受到严重限制,因为它只能将正常命令输出发送到控制台(终端),从而阻止输出通过管道发送或在变量或文件中捕获。在我的this answer中查找背景信息。
答案 3 :(得分:1)
Powershell 7 Preview 5拥有它们。 我不知道为什么在没有任何通知或说明的情况下将其删除。 https://devblogs.microsoft.com/powershell/powershell-7-preview-5/会根据要求提供这两个命令的输出。
echo 'hello' && echo 'there'
hello
there
echo 'hello' || echo 'there'
hello
答案 4 :(得分:0)
稍长一点的方法见下文
try {
hostname
if ($lastexitcode -eq 0) {
ipconfig /all | findstr /i bios
}
} catch {
echo err
} finally {}
答案 5 :(得分:0)
在Powershell 7.0发布后,支持&&
和||
https://devblogs.microsoft.com/powershell/announcing-powershell-7-0/
New operators:
Ternary operator: a ? b : c
Pipeline chain operators: || and &&
Null coalescing operators: ?? and ??=
答案 6 :(得分:-1)
最简单的解决方案是使用
<?php
...
// If no 'page' parameter is found, default to 1
$currentPage = isset($_GET['page']) ? $_GET['page'] : 1;
// Results per page
$limit = 10;
// Offset = (page - 1) * limit. (page 1 = 0, page 2 = 10, etc...)
$offset = ($currentPage - 1) * $limit;
if(isset($_POST['search']))
{
$valueToSearch = $_POST['valueToSearch'];
// search in all table columns
// using concat mysql function
$query = "SELECT * FROM `users` WHERE CONCAT(`id`, `fname`, `lname`, `age`) LIKE '%".$valueToSearch."%' LIMIT $limit OFFSET $offset";
$search_result = filterTable($query);
}
else {
$query = "SELECT * FROM `users` LIMIT $limit OFFSET $offset";
$search_result = filterTable($query);
}
// function to connect and execute the query
function filterTable($query)
{
$connect = mysqli_connect("localhost", "root", "", "test_db");
$filter_Result = mysqli_query($connect, $query);
return $filter_Result;
}
?>
<!DOCTYPE html>
<html>
<head>
<title>PHP HTML TABLE DATA SEARCH</title>
<style>
table,tr,th,td
{
border: 1px solid black;
}
</style>
</head>
<body>
<form action="php_html_table_data_filter.php" method="post">
<input type="text" name="valueToSearch" placeholder="Value To Search"><br><br>
<input type="submit" name="search" value="Filter"><br><br>
<table>
<tr>
<th>Id</th>
<th>First Name</th>
<th>Last Name</th>
<th>Age</th>
</tr>
<!-- populate table from mysql database -->
<?php while($row = mysqli_fetch_array($search_result)):?>
<tr>
<td><?php echo $row['id'];?></td>
<td><?php echo $row['fname'];?></td>
<td><?php echo $row['lname'];?></td>
<td><?php echo $row['age'];?></td>
</tr>
<?php endwhile;?>
</table>
</form>
<a href="php_html_table_data_filter.php?page=<?php echo $page-- ?>">Previous</a>
<a href="php_html_table_data_filter.php?page=<?php echo $page++ ?>">Next</a>
</body>
</html>
在cmd shell中。当然,您不能在.ps1脚本中使用它,因此存在这种限制。