小编sod*_*low的帖子

需要更快地制作PowerShell脚本

我教自己的Powershell所以我不知道它的一切.

我需要使用我输入的确切行数(数据库是预定义的)搜索数据库,它包含> 11800个条目.

你能帮我找一下这个慢的原因吗?

码:

$Dict = Get-Content "C:\Users\----\Desktop\Powershell Program\US.txt"

if($Right -ne "") {
    $Comb = $Letter + $Right
    $total = [int]0    
    $F = ""

    do {
        $F = $Dict | Select-Object -Index $total
        if($F.Length -eq $Num) {
            if($F.Chars("0") + $F.Chars("1") -eq $Comb) {
                Add-Content "C:\Users\----\Desktop\Powershell Program\Results.txt" "$F"
            }
        }
        $total++
        Write-Host $total
    } until([int]$total -gt [int]118619)

    $total = [int]0
    $F = ""
}
Run Code Online (Sandbox Code Playgroud)

如何逐行搜索/匹配处理加快这一行?我是通过多线程做的吗?如果是这样的话?

powershell performance

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

尝试/捕获或If/Else?

你好,我很难找到如何让这个脚本工作,我是非常新的脚本,但我很了解它,但仍然找出一些事情.

try {
    Test-Connection -Computername $_ -count 1 -ErrorAction Stop
} catch {
    $_.Exception.ErrorCode -eq 0x800706ba
} `
{
    $err = 'Unavailable (Host Offline or Firewall)'
}

try {
    Test-UserCredentials -Username testuser -Password (Read-Host -AsSecureString)
} catch {
    $_.CategoryInfo.Reason -eq 'UnauthorizedAccessException'
} `
{
    $err = 'Access denied (Check User Permissions)'
}

Write-Warning "$computer- $err" | Out-File -FilePath c:\temp\Folder\Errors.txt -Append
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是这个脚本来测试系统是否响应.如果为True则下一步将是测试凭据,最后一步是执行get-wmiobject查询.但是如果系统没有响应ping,那么我想捕获无法响应ping的主机名,捕获它并将其导出到txt并在凭证失败时执行相同操作.

powershell if-statement credentials try-catch

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

Powershell 控制台在 Register-ObjectEvent 操作中执行函数时出现问题

在 powershell ISE 中工作正常,但在控制台中我得到:

术语“MainAction”不被识别为 cmdlet、函数、脚本文件或可操作程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。

怎么修?

function MainAction () {
    $test = "123"
    Write-Host $test
}

MainAction

$action = {
    try {
        Write-Host in action
        MainAction
    } catch {
        Write-Host $Error    
        $timer.Stop()
        Unregister-Event thetimer
    }
}

$timer = New-Object Timers.Timer    
Register-ObjectEvent -InputObject $timer -EventName elapsed `
                     -SourceIdentifier thetimer -Action $action -OutVariable out
$timer.Interval = 5000
$timer.AutoReset = $true
$timer.Start()
Run Code Online (Sandbox Code Playgroud)

编辑:

我发现我可以使用配置文件来存储函数定义。要创建配置文件,请使用:

New-Item -path $profile -itemType file -force
Run Code Online (Sandbox Code Playgroud)

但我仍然感兴趣为什么 powershell ISE 不需要配置文件来存储和使用Register-ObjectEvent.

powershell

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

使用PowerShell获取Azure VM OS名称

我一直在尝试使用PowerShell从Microsoft Azure获取VM OS名称.

我想我非常接近解决方案,但我不知道我哪里出错了.

这是我用来获取VM详细信息的命令:

Get-AzureRmVM -ResourceGroupName TEST -Name VF-Test1 | Select OsType
Run Code Online (Sandbox Code Playgroud)

我得到的答案只是空白.

运行以下命令时:

Get-AzureRmVM -ResourceGroupName TEST -Name VF-Test1
Run Code Online (Sandbox Code Playgroud)

我获得了属于该VM的所有细节.

powershell azure

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

系统管理员的Powershell URI构建器

请原谅我的无知 - 我正在尝试编写一个powershell cmdlet,它接受用户输入并构建查询uri到API(一个强制性,3个选项) - 我有一般的想法,我需要使用哈希表的字典查询字符串和参数.

我正在努力建立 $baseurl + $querystring + '=' + $parameter + '&' + $querystring + '=' $value (if not null)

例如 https://example.com/api?param1=value&param2=value

到目前为止 - 这是非常粗糙的,完全不起作用:

            Function Get-commonURI{ #takes 4 params from user
                [CmdletBinding()]
                Param(
                    [Parameter(Mandatory=$true,
                                ValueFromPipeline=$true,
                                ValueFromPipelineByPropertyName=$true)]

                                [String[]]$value1

                                [Parameter(Mandatory=$false,
                                ValueFromPipeline=$true,
                                ValueFromPipelineByPropertyName=$true)]

                                [String[]]$value2,
                                [String[]]$value3,
                                [String[]]$value4 

                ) #end param 
            }
        #put the input into a paramter hash table with the query strings

        $Parameters = @{
            query = 'querysting1', 'querystring2', 'querystring3', 'querystring4'
            values = $value1,$value2.$value2, $value4
        }

        uri = …
Run Code Online (Sandbox Code Playgroud)

powershell

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

将字符串传入和传出函数

我是Powershell的新手,但我用Java和其他语言编程.

我试图将一个字符串传递给一个函数,然后让该函数返回该字符串.下面是我尝试运行的简单代码:

#funcpass.ps1
function test {
    Param([string]$input)

    $out = $input

    return $out
}

$a = test hello world
Write-Host $a
Run Code Online (Sandbox Code Playgroud)

我希望这会传递字符串,hello world然后将字符串返回$a到要打印的变量中.相反,我的控制台返回:

PS P:\test> .\funcpass.ps1

PS P:\test> 
Run Code Online (Sandbox Code Playgroud)

我遇到了某种范围错误吗?任何帮助将不胜感激.我不确定版本号是否有帮助,但这里是:

PS P:\test> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      14393  1198
Run Code Online (Sandbox Code Playgroud)

powershell scope function

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

无法在 powershell 上访问程序文件 (x86)

所以,我想clc在一些文件C:\Program Files (x86)。每当我尝试使用clc它们时,都会收到以下消息:

错误信息

此外,每当我执行本指南中的建议时,就会发生这种情况:

  • 按住 Shift 并右键单击您的远程文件夹。
  • 单击“在此处打开命令窗口”。
  • 进入powershell。
  • 输入 clc C:\Steam\userdata\SteamID\AppID\remote\*(clc + 远程文件夹的绝对路径 + * 以影响所有文件)。

这是蒸汽错误还是我做错了什么?

编辑:用引号括起路径后,我收到此错误:

PS C:\Users\Jake> clc "C:\Program Files (x86)\Steam\userdata\96072243\440\remote\*"
clc : Access to the path 'C:\Program Files (x86)\Steam\userdata\96072243\440\remote\cfg' is denied.
At line:1 char:1
+ clc "C:\Program Files (x86)\Steam\userdata\96072243\440\remote\*"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (C:\Program File...\440\remote\cfg:String) [Clear-Content], UnauthorizedAccessException
    + FullyQualifiedErrorId : ClearContentUnauthorizedAccessError,Microsoft.PowerShell.Commands.ClearContentCommand

clc : Access to the path 'C:\Program Files (x86)\Steam\userdata\96072243\440\remote\materials' is denied.
At line:1 char:1 …
Run Code Online (Sandbox Code Playgroud)

powershell

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