add-type -Language CSharpVersion3 -TypeDefinition @"
public class pack_code
{
public pack_code() {}
public string code { get; set; }
public string type { get; set; }
}
"@
$a = New-Object pack_code
$a.code = "3"
$a.type = "5"
$b = New-Object pack_code
$b.code = "2"
$b.type = "5"
$c = New-Object pack_code
$c.code = "2"
$c.type = "5"
$d = New-Object pack_code
$d.code = "1"
$d.type = "1"
$codes = New-Object 'System.Collections.Generic.List[object]'
$codes.add($a)
$codes.add($b)
$codes.add($c)
$codes.add($d)
Run Code Online (Sandbox Code Playgroud)
有没有办法从$ code中选择不同的并选择类型等于1的对象?如何在PowerShell中使用LINQ?
在这篇伟大的文章中, Keith解释了Powershell中终止和非终止错误之间的区别.根据Keith从调用.NET对象或类型成员抛出的异常是非终止错误.
确实,如果我们定义这个.NET类进行测试:
$a = Add-Type 'public class bla { public static void bl() { throw new System.ApplicationException("test"); }}' -PassThru
Run Code Online (Sandbox Code Playgroud)
然后这个功能:
function tst { 1 | write-host; $a::bl(); 2 | Write-host }
Run Code Online (Sandbox Code Playgroud)
我们将看到,当调用tst函数时,异常似乎是非终止的:第二个Write-Host起作用.
但考虑一下:
function tst2 { try { tst } catch { "Catch!" } }
Run Code Online (Sandbox Code Playgroud)
如果我们打开文档,我们可以读到catch响应或处理脚本中的终止错误.在文章的整个文本中,文章所处理的错误在许多地方被称为"终止".
因此,当我们在第二个Write-Host上面运行该行时,不会运行但是catch块会运行.似乎我们的非终止错误突然终止了.
怎么会?
另一个观察结果是,有了旧的陷阱,它仍然是非终止错误:
function tst3 { tst trap { "Trap!" } }
Run Code Online (Sandbox Code Playgroud)
现在,从实际角度来看,我想要实现的目标如下.在一段代码中,我想终止从.NET代码抛出的异常.我想留下cmdlet终止的终止错误和cmdlet非终止的非终止错误.
我该如何实现这一目标?
例:
Do-Something
Call::Something()
Do-SomethingElse
Call::SomethingElse()
Do-YetMoreSomething
Call::YetMoreSomething()
Run Code Online (Sandbox Code Playgroud)
我想终止上面.NET调用的所有异常.我还想终止从cmdlet终止错误.我不想终止cmdlet中的非终止错误.
我无法弄清楚这有什么问题.当我在终端中运行并输入密码时,没有任何反应,但如果我在终端中单独运行每个命令,它就可以工作.谢谢!
#!/bin/bash
sudo su;
mkdir /opt/D3GO/;
cp `pwd`/D3GO /opt/D3GO/;
cp `pwd`/D3GO.png /opt/D3GO/;
cp `pwd`/D3GO.desktop /usr/share/applications/;
chmod +x /opt/D3GO/D3GO
Run Code Online (Sandbox Code Playgroud) 我正在写一个脚本Powershell,导出所有securitygroups和他们members的Active Directory.现在我想格式化输出.csv.
代码:
$Groups = Get-ADGroup -Properties * -Filter * -SearchBase "OU=SERVICES,DC=XXXXXX,DC=XXXXX"
$Table = @()
$Record = @{
"Group Name" = ""
"Name" = ""
"Username" = ""
}
Foreach($G In $Groups)
{
$Arrayofmembers = Get-ADGroupMember -identity $G -recursive | select name,samaccountname
Foreach ($Member in $Arrayofmembers)
{
$Record."Group Name" = $G.Name
$Record."Name" = $Member.name
$Record."UserName" = $Member.samaccountname
$objRecord = New-Object PSObject -property $Record
$Table += $objrecord
}
}
$Table | …Run Code Online (Sandbox Code Playgroud) 我想创建一个启动cygwin并执行特定命令的批处理文件(该命令是读取bash文件并在其中执行一些命令).
这是我开发的批处理文件,它在某种程度上起作用.cygwin终端打开并尝试读取bash文件,但无法执行内部命令:
@ECHO OFF
C:\cygwin64\bin\mintty.exe -li /cygdrive/c/(path-to-bash-file-location)/(MyBashFile)
PAUSE
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
按照此处的示例https://learn.microsoft.com/en-us/cli/azure/vm/run-command?view=azure-cli-latest
我在运行命令时遇到错误
az vm run-command invoke --command-id RunPowerShellScript --name win-vm -g my-resource-group --scripts @script.ps1
Run Code Online (Sandbox Code Playgroud)
错误:
展开运算符“@”不能用于引用表达式中的变量。“@script”只能用作命令的参数。要引用表达式中的变量,请使用“$script”。
将其放在引号中只会传入引号中的内容,而不是脚本的内容。
我不经常使用 Powershell 或 Linux,所以我不确定: ls -al 在 Powershell“术语”中是什么。我试图找到一些东西,但它说 Powershell 中没有等效的命令。看起来很奇怪,所以我想我应该尽快问一下。
我设置了一个在我的帐户下运行的计划任务.它运行的所有内容,即使成功,也会返回(2)的操作代码.我在下面的链接中看了这个错误代码,并声称它找不到特定的文件.
http://www.hiteksoftware.com/knowledge/articles/049.htm
即使我做一些非常简单的事情,我也会找回(2)的操作代码.例如:
run program: cmd.exe
start in path: c:\windows\system32
Run Code Online (Sandbox Code Playgroud)
我启动任务,我看到进程在我的任务管理器中运行,所以我终止了任务.然后我检查计划任务的历史记录,它显示为(2).
对我正在做的事情更加现实:
<?
/* file in c:\php\test.php */
echo "hello";
?>
Run Code Online (Sandbox Code Playgroud)
运行程序: php.exe
从路径开始: c:\php
参数: -f test.php
一切都在命令行中工作,但Windows计划任务保持返回操作代码(2).我应该看到(0)的操作代码,这意味着成功,正确吗?
我正在尝试实现Node.JS apn模块以连接到APNS(Apple推送通知服务),以便从运行Ubuntu 12.04的Amazon EC2实例上托管的节点服务器(使用ExpressJS)向iPhone设备发送通知.我收到此错误:
"Error: Cannot switch to old mode now.",
" at emitDataEvents (_stream_readable.js:720:11)",
" at ReadStream.Readable.resume (_stream_readable.js:705:3)",
" at TLSSocket.<anonymous> (/home/ubuntu/usemebeta/routes/message.js:101:48)",
" at TLSSocket.g (events.js:186:14)",
" at TLSSocket.EventEmitter.emit (events.js:97:17)",
" at TLSSocket.<anonymous> (_tls_wrap.js:579:16)",
" at TLSSocket.EventEmitter.emit (events.js:97:17)",
" at TLSSocket._finishInit (_tls_wrap.js:198:8)"
Run Code Online (Sandbox Code Playgroud)
当我调用apn模块函数来推送通知时.但是,当我在文件中写入的函数中执行相同的操作并执行该文件时,它的工作正常.请帮忙.我该如何解决这个问题呢?
我有一个Windows批处理文件,其目的是设置一些环境变量,例如
=== MyFile.cmd ===
SET MyEnvVariable=MyValue
Run Code Online (Sandbox Code Playgroud)
用户可以在完成需要环境变量的工作之前运行它,例如:
C:\> MyFile.cmd
C:\> echo "%MyEnvVariable%" <-- outputs "MyValue"
C:\> ... do work that needs the environment variable
Run Code Online (Sandbox Code Playgroud)
这大致相当于Visual Studio安装的"Developer命令提示符"快捷方式,它设置了运行VS实用程序所需的环境变量.
但是,如果用户碰巧打开了Powershell提示符,则环境变量当然不会传播回Powershell:
PS C:\> MyFile.cmd
PS C:\> Write-Output "${env:MyEnvVariable}" # Outputs an empty string
Run Code Online (Sandbox Code Playgroud)
对于在CMD和PowerShell之间切换的用户而言,这可能会造成混淆.
有没有办法可以在我的批处理文件MyFile.cmd中检测到它是从PowerShell调用的,所以我可以,例如,向用户显示警告?这需要在没有任何第三方实用程序的情况下完成.