相关疑难解决方法(0)

Powershell最初被禁用.为什么一个谨慎的管理员会争辩让它被禁用?

默认情况下,Powershell最初被禁用,可能是出于安全原因.

当我要求启用它以便我可以使用它时,管理员小心谨慎采取可能使服务器更容易受到攻击的行为,因此,它没有启用,我等待了.

虽然微软在安全性方面有一个糟糕的记录,并且一个功能被禁用可能在理论上更加安全,启用它,但这与任何事情都有关系.

Powershell本质上更危险,它应该比任何其他Windows脚本语言更令人担心吗?

powershell

5
推荐指数
1
解决办法
449
查看次数

从 powershell 调用 ruby​​ 脚本

我有以下情况:带有以下变量的 powershell 脚本:

$RUBY = "C:\installing\ruby\bin\ruby.exe"
$ARGS = "C:\files\sript.rb $Arg1 $Arg2 $Arg3"
Run Code Online (Sandbox Code Playgroud)

在批处理文件中我可以写

%RUBY% %ARGS% 
Run Code Online (Sandbox Code Playgroud)

它有效。

但我怎样才能在 powershell 中做到这一点?

重要的是 ruby​​ 安装路径是可变的。

我尝试使用 Start-Process 但只启动了 ruby​​.exe,没有脚本。

有什么提示吗?

谢谢。

ruby powershell

5
推荐指数
1
解决办法
7301
查看次数

带有双引号的参数未通过ArgumentList正确传递给Scriptblock

我正在编写通用的PowerShell脚本来在远程计算机上执行部署.我遇到了一个我无法超越的问题,这个问题是ArgumentList传递的Scriptblock中带双引号的参数

我有这样的事情:

$remoteAddress = "some-pc"
$deploymentCommand = "D:\some path\Command.exe"
$deploymentPackages = @(`"“package - one - external"`", `"“package - two - external"`", `"“package - three - internal"`")

foreach ($deploymentPackage in $deploymentPackages)
{
invoke-command -ComputerName $remoteAddress -ScriptBlock { param ($deployCmd, $deployPackage) &  $deployCmd -package:$deployPackage -action:doit } -ArgumentList   $deploymentCommand,$deploymentPackage
}
Run Code Online (Sandbox Code Playgroud)

我在$ deploymentPackages中添加了双引号.而且我仍然像我一样快速执行我的命令(当然失败了):

D:\some path\Command.exe -package:package - one - external -action:doit
D:\some path\Command.exe -package:package - two - external -action:doit
D:\some path\Command.exe -package:package - three - external -action:doit
Run Code Online (Sandbox Code Playgroud)

适当的执行路径应该是:

D:\some path\Command.exe -package:"package - three - …
Run Code Online (Sandbox Code Playgroud)

powershell powershell-remoting

5
推荐指数
2
解决办法
2万
查看次数

如何抑制PowerShell命令中的可执行文件引用

有没有办法抑制PowerShell喜欢生成的每个命令行参数周围的括号引号,然后传递给包含空格的命令行参数的外部可执行文件?

情况如下:

解压许多安装程序的一种方法是使用以下形式的命令:

msiexec /a <packagename> /qn TARGETDIR="<path to folder with spaces>"
Run Code Online (Sandbox Code Playgroud)

尝试从PowerShell执行此操作已经证明非常困难.PowerShell喜欢用双引号括起空格参数.以下行:

msiexec /a somepackage.msi /qn 'TARGETDIR="c:\some path"'

msiexec /a somepackage.msi /qn $('TARGETDIR="c:\some path"')

$td = '"c:\some path"'

msiexec /a somepackage.msi /qn TARGETDIR=$td
Run Code Online (Sandbox Code Playgroud)

所有结果都生成以下命令行(由Win32 GetCommandLine()API报告):

"msiexec" /a somepackage.msi /qn "TARGETDIR="c:\some path""
Run Code Online (Sandbox Code Playgroud)

这个命令行:

msiexec /a somepackage.msi TARGETDIR="c:\some path" /qn
Run Code Online (Sandbox Code Playgroud)

结果是

"msiexec" /a fooinstaller.msi "TARGETDIR=c:\some path" /qn
Run Code Online (Sandbox Code Playgroud)

似乎PowerShell在将表达式传递给外部可执行文件时,希望将表达式的结果用于表示引号中的一个参数.这适用于大多数可执行文件.但是,MsiExec非常关注它想要的引用规则,并且不接受PowerShell为路径生成的任何命令行.

有没有办法抑制这种行为?

powershell msiexec

4
推荐指数
2
解决办法
1万
查看次数

从powershell脚本调用可执行文件(带参数)

我正在从powershell调用一个zip实用程序,并且很难直接获取其参数.这是代码:

    if (-not (test-path "C:\Program Files (x86)\7-Zip\7z.exe")) {throw "C:\Program Files (x86)\7-Zip\7z.exe needed"} 
    set-alias sz "C:\Program Files (x86)\7-Zip\7z.exe" 

    $argument_1 = "c:\temp\DeployTemp\"
    $argument_0 = "c:\temp\Release\Web_Feature_2012R10_1_1112.prod.com.zip"

    sz x $argument_0 -o$argument_1
Run Code Online (Sandbox Code Playgroud)

问题是7zip可执行调用实际上是提取到名为$ argument_1的目录,而不是存储在字符串中的实际值.我试过在几个方面逃避价值,但没有运气.不幸的是7zip"-o"标志在它和输出目录之间没有空格......

powershell 7zip

4
推荐指数
1
解决办法
4454
查看次数

错误:说明=查询无效

由于混乱的组策略对象,多个计算机不应安装TightVNC.GPO已经不见了,所以从那里删除软件并不是我所知道的选项.因此,我正在编写脚本以便从计算机列表中删除PowerShell.

这是我的脚本:

if ($args.length -ne 1) {
    Write-Warning "Must pass computer name, ending script.";
    break
}

$pc = $args[0]

Write-Output "Scanning $pc for TightVNC...."
$prod = wmic /node:$pc product get name | where {$_ -match "TightVNC"}
if ($prod) {
    Write-Output "Found TightVNC, attempting uninstall...."
    wmic /node:$pc product where name="TightVNC" call uninstall
} else {
    Write-Warning "Could not find TightVNC on $pc."
}
Write-Output "Done."
Run Code Online (Sandbox Code Playgroud)

现在,我的输出如下:

Scanning [computer] for TightVNC....
Found TightVNC, attempting uninstall....
ERROR:
Description = Invalid query
Done.
Run Code Online (Sandbox Code Playgroud)

但是,如果我将第二个wmic行复制并粘贴到一个提升的命令提示符并用[computer]替换$ …

powershell powershell-2.0

4
推荐指数
1
解决办法
6159
查看次数

Powershell - 使用参数中包含的括号调用 icacls

我对 Powershell 还很陌生,但我在 VBScript 和 Python 方面有很多经验。我正在努力成为一名优秀的 Windows 管理员并更多地使用 Powershell。所以,这就是我想要做的:父文件夹包含数十个名为 AD 用户名的子文件夹(例如,Users\username1、Users\username2,其中 Users 是父文件夹)。我想遍历每个文件夹名称,解析出子文件夹名称,并将其传递给 icacls 以根据用户名应用权限。我做了一个多班轮,因为我遇到了管道问题。这是我尝试了几种不同方法后的结果:

$root_folder = "c:\temp\test"
$cmd1 = "icacls "
$cmd2 = " /grant cm\"
$cmd3 = ":`(OI`)`(CI`)F"
$paths_collection = get-childitem $root_folder | foreach-object -process {$_.FullName}
foreach ($path in $paths_collection)
{$string = $path.split("\");$last = $string[-1];$command = $cmd1 + $path +$cmd2 +$last +$cmd3;invoke-expression $command}
Run Code Online (Sandbox Code Playgroud)

它最初并不那么粗糙,但是当我遇到问题时,我开始将其分解。

问题- 在 $cmd3 中,(OI)(CI) 没有完全进入调用表达式。如果我将 $cmd3 更改为 ":F" 它可以工作,但我必须使用有问题的参数设置继承。请帮忙。我一整天都在绞尽脑汁想这个。无法真正找到专门处理此问题的任何内容(尝试反引号,将 $command 引用为“$command”等)

错误: 术语“OI”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。在第 1 行字符:56 + icacls C:\temp\test\garthwaitm /grant domain\user1 :(OI …

powershell powershell-2.0

3
推荐指数
2
解决办法
1万
查看次数

在Windows PowerShell中使用svn缺少参数-m

我正在尝试在Windows PowerShell上运行它:

svn ci -m "" directory_name
Run Code Online (Sandbox Code Playgroud)

但它返回:

svn:E205005:日志消息是路径名(-F意图?); 使用'--force-log'覆盖

我试图cd该目录并提交没有directory_name参数,并返回:

svn ci -m ""
Run Code Online (Sandbox Code Playgroud)

svn.exe:缺少参数:m

我认为powershell可能不理解-args但很少(对我而言)这有效:

svn -h
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?这一切在cmd完美运行:/

svn windows powershell command-line

3
推荐指数
1
解决办法
3668
查看次数

powershell:用参数启动程序的脚本?

当我在下面运行Powershell脚本时,我收到以下错误.如何通过参数PowerShell运行程序?该脚本将是一个组策略登录.

Invoke-Expression:找不到接受参数'\ TBHSERVER\NETLOGON\BGInfo\BGIFILE.bgi/timer:0/s ilent/nolicprompt'的位置参数.在X:\ Systems\scripts\PowerShell\UpdateDesktopWithBGInfo.ps1:6 char:18 + Invoke-Expression <<<< $ logonpath $ ArguList + CategoryInfo:InvalidArgument :( :) [Invoke-Expression],ParameterBindingException + FullyQualifiedErrorId:PositionalParameterNotFound, Microsoft.PowerShell.Commands.InvokeExpressionCommand

$LogonPath = $env:LOGONSERVER + "\NETLOGON\BGInfo\Bginfo.exe" 
$ArguList = $env:LOGONSERVER + '\NETLOGON\BGInfo\BGIFILE.bgi /timer:0 /silent /nolicprompt '
invoke-command $LogonPath
Invoke-Expression $logonpath $ArguList
Run Code Online (Sandbox Code Playgroud)

authentication powershell group-policy invoke-command

2
推荐指数
2
解决办法
2万
查看次数