小编Fro*_* F.的帖子

为什么add_EventName不能与Timer一起使用?

在PowerShell中,您可以使用add_NameOfEvent({scriptblock})对象的-method 订阅事件.这适用于像按钮等的Form对象.但是,当我尝试使用它时System.Timers.Timer它不起作用.这是为什么?样品:

$timer1 = New-Object System.Timers.Timer
$timer1.Interval = 2000
$timer1.add_Elapsed({ Write-Host "Timer1 tick" })

$timer2 = New-Object System.Timers.Timer
$timer2.Interval = 2000
Register-ObjectEvent -InputObject $timer2 -EventName Elapsed -Action { Write-Host "Timer2 tick" }

$timer1.Start()
$timer2.Start()
Run Code Online (Sandbox Code Playgroud)

$timer2将工作正常,但$timer1永远不会写入控制台.Timer与ex有什么不同.一个表单组件(该add_...方法的工作原理)?是否Timer在单独的线程中运行并因此写入"隐藏"控制台?

证明该方法适用于那些不熟悉它的人的表单组件:

PS > Add-Type -AssemblyName System.Windows.Forms
PS > $b = New-Object System.Windows.Forms.Button
PS > $b.add_click({ Write-Host "button" })
#Get-EventSubscriber won't show this event, but it's added
PS > $b.PerformClick()
button
Run Code Online (Sandbox Code Playgroud)

powershell powershell-2.0 powershell-3.0

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

使用WMI EnableStatic方法时出现问题

我正在尝试创建一个工具,将动态DHCP提供的IPv4地址,网关和DNS设置转换为静态配置.我曾尝试使用WMI解决这个难题,但我有一个问题,我无法弄清楚.

应用程序完成,DNS和网关已配置,但EnableStatic方法(设置IP地址和子网)已不成功,这意味着即使已设置默认网关,仍会从DHCP(带有灰色字段)接收IP.我该如何解决?

EnableStatic的ReturnValue为70(无效的IP地址).奇怪的是输入参数与我2秒前从NIC中提取的输入参数相同.

这是代码(GUI除外), http://pastebin.com/AE3dGhUz:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Management;

namespace Static_NIC_Settings_Creator
{
    public partial class Form1 : Form
    {
        private ManagementObjectCollection queryCollection;
        private string[] networkInterfaces;
        private int currentNIC;
        private string[] ipAddress;
        private string[] subnetMask;
        private string[] defaultIPGateway;
        private string[] dnsServerSearchOrder;

        public Form1()
        {
            InitializeComponent();
            getNICs();
        }

        private void convertButton_Click(object sender, EventArgs e)
        {
            if (networkInterfaces.Count() > 0)
            {
                //Get current NIC …
Run Code Online (Sandbox Code Playgroud)

c# wmi

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

使用Powershell替换INI文件中的整行

我在替换ini文件中的整行时遇到问题,它似乎只是将我的结果添加到同一行.

这是ini文件:

    [environment]
APP_USER=Domain\User1
Run Code Online (Sandbox Code Playgroud)

我只想用例如APP_USER = Domain\User2替换APP_USER = Domain\User1.

这是我的代码:

$USER = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name          
(Get-Content D:\Test\test.ini) | ForEach-Object { $_ -replace "APP_USER=" , "APP_USER=$user" } | Set-Content D:\Test\test.ini
Run Code Online (Sandbox Code Playgroud)

当我使用上面的代码时,我得到了这个结果:

    [environment]
APP_USER=Domain\User2Domain\User1
Run Code Online (Sandbox Code Playgroud)

非常感谢帮助.

//关注PMS

regex powershell replace

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

为什么`-lt`对字符和字符串表现不同?

我最近回答了关于使用-lt-gt使用字符串的问题.我的回答是基于我之前读过的一些内容,它说-lt每次比较每个字符串中的一个字符,直到ASCII值不等于另一个字符串.此时结果(低/等/更大)决定.通过该逻辑,"Less" -lt "less"应该返回True因为L具有比ASCII更低的ASCII字节值l,但它不会:

[System.Text.Encoding]::ASCII.GetBytes("Less".ToCharArray())
76
101
115
115

[System.Text.Encoding]::ASCII.GetBytes("less".ToCharArray())
108
101
115
115

"Less" -lt "less"
False
Run Code Online (Sandbox Code Playgroud)

似乎我可能错过了一个关键部分:测试不区分大小写

#L has a lower ASCII-value than l. PS doesn't care. They're equal
"Less" -le "less"
True

#The last s has a lower ASCII-value than t. PS cares.
"Less" -lt "lest"
True

#T has a lower ASCII-value than t. PS doesn't care
"LesT" -lt "lest" …
Run Code Online (Sandbox Code Playgroud)

powershell operator-overloading operators

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

Measure-Object:在任何对象的输入中都找不到属性"length"

我正在创建一个菜单,其中一个选项是报告指定文件夹的文件夹大小并将其显示给用户.我输入文件夹名称后

cls
$Path = Read-Host -Prompt 'Please enter the folder name: '

$FolderItems = (Get-ChildItem $Path -recurse | Measure-Object -property length -sum)      

$FolderSize = "{0:N2}" -f ($FolderItems.sum / 1MB) + " MB"
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Measure-Object : The property "length" cannot be found in the input for any objects.
At C:\Users\Erik\Desktop\powershell script.ps1:53 char:48
+ ... (Get-ChildItem $Path -recurse | Measure-Object -property length -sum)
+                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Measure-Object], PSArgumentException
    + FullyQualifiedErrorId : GenericMeasurePropertyNotFound,Microsoft.PowerShell.Commands. 
   MeasureObjectCommand
Run Code Online (Sandbox Code Playgroud)

powershell

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

Azure Bicep - 未将对象引用设置到实例

我正在尝试使用以下代码创建一个简单的应用程序服务计划。

param Location string = 'eastus'
resource appServicePlan1 'Microsoft.Web/serverfarms@2020-12-01' = {
  name: 'myasp'
  location: Location
  sku: {
    name: 'S1'
    capacity: 1
    }
}
Run Code Online (Sandbox Code Playgroud)

下面是我用来执行上述 Bicep 脚本的 Azure CLI 命令

az deployment group create --name deploy1 --resource-group az-devops-eus-dev-rg1 --template-file main.bicep
Run Code Online (Sandbox Code Playgroud)

下面是截图

在此输入图像描述

所有这些都在早些时候发挥作用。我正在使用今天发布的最新版本的 Bicep (v0.9.1)。

任何有关现在发生这种情况的原因的指示将不胜感激。

azure azure-bicep

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

DataGridView缺少具有空数据源的新行

我正在创建一个应用程序,它使用DataGridView创建和修改稍后将导入系统的本地List.它应该由用户编辑(在DGV中单击和写入),它还应该支持从csv导入,这意味着我需要DGV和数据源之间的双向同步.

我已将DGV的DataSource设置为BindingList<Client>如下所示:

//In my seperate Client class-file
public class Client
{
    private string _name;
    private string _mac;
    private string _status;

    public Client(string pcnavn, string MAC)
    {
        _pcnavn = pcnavn;
        _mac = mac;
    }

    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            _name = value;
        }
    }

    public string MAC
    {
        get
        {
            return _mac;
        }
        set
        {
            _mac = value;
        }
    }

    public string Status
    {
        get
        {
            return _status;
        }
        set
        {
            _status = …
Run Code Online (Sandbox Code Playgroud)

c# datagridview winforms

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

powershell脚本删除输出中的第一个字符

如何删除此命令输出中的第一行?如果输出是A123456,我只想让它向我123456显示A.

Get-User $_ | Select sAMAccountName
Run Code Online (Sandbox Code Playgroud)

powershell

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

从 [regex] 类型加速器表达式中捕获命名组的 PowerShell 语法是什么?

该问题使用以下示例字符串:

$r = 
"20160112 11:26:39 UPDATE CMIS-NC.ABC.LA012345J.NAM/MOUSE, MICKEY J.SEX/M.RAC/W.DOB/19670601.PCA/A1.ARI/CRIM1234567.DNY/CONVICTED OF DISTRIBUTING THE PEACE.OCA/123456.SOR/LA.MIS/CONFIRM RECORD AT DISNEY STUDIOS 123-456-7890 OR PAGER 123-456-7890.
20160112 11:26:39 RESPONSE CMIS-NC.ACK 1234567890 CMIS-NC  123456 CMIS-NC  123456 20160112 11:26:31

.
20160112 11:26:39 INFO MSN of message to LEMS is <1234567890>.
20160112 11:26:39 RESPONSE CMIS-NC.MSG 1234567890 CMIS-NC  123456 NC2K     AC1234 20160112 11:26:31
LA012345J
CTL/
ATN/

6L12345678901234567890EDP 
LA012345J
ACCEPT MKE/EDP
NAM//MOUSE, MICKEY J
ARI/CRIM1234567
NRI/1234567890"
Run Code Online (Sandbox Code Playgroud)

可以使用 PowerShell 内置正则表达式捕获命名组,方法是在$matches自动变量中引用它们:

$updateRequestPattern = "(?<RequestDate>\d{8} \d{2}:\d{2}:\d{2}) (?<UpdateRequest>UPDATE CMIS-NC\.[A-Z]{3,4}\.LA012345J\..+)\n"

$request = $r …
Run Code Online (Sandbox Code Playgroud)

.net regex powershell type-accelerators

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

任务计划 Powershell 脚本不显示消息框

我有一个 Powershell 脚本,计划在多个主机上运行过夜。它由任务计划程序中设置的 CMD 脚本(包装器)执行。

在某些情况下,我需要向用户显示一条消息,该消息将在早上到达,让他决定是继续执行脚本还是中止脚本。

我正在使用 system.windows.froms.MessageBox::Show("My Message","status","4") 来显示消息。

当我从 Windows PowerShell ISE 控制台执行 CMD 脚本时,它工作得很好,但是,如果我从任务计划程序执行它,它会跳过弹出消息。

这个问题有什么解决办法吗?

powershell messagebox taskscheduler

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