在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) 我正在尝试创建一个工具,将动态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) 我在替换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
我最近回答了关于使用-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) 我正在创建一个菜单,其中一个选项是报告指定文件夹的文件夹大小并将其显示给用户.我输入文件夹名称后
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) 我正在尝试使用以下代码创建一个简单的应用程序服务计划。
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)。
任何有关现在发生这种情况的原因的指示将不胜感激。
我正在创建一个应用程序,它使用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) 如何删除此命令输出中的第一行?如果输出是A123456,我只想让它向我123456显示A.
Get-User $_ | Select sAMAccountName
Run Code Online (Sandbox Code Playgroud) 该问题使用以下示例字符串:
$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) 我有一个 Powershell 脚本,计划在多个主机上运行过夜。它由任务计划程序中设置的 CMD 脚本(包装器)执行。
在某些情况下,我需要向用户显示一条消息,该消息将在早上到达,让他决定是继续执行脚本还是中止脚本。
我正在使用 system.windows.froms.MessageBox::Show("My Message","status","4") 来显示消息。
当我从 Windows PowerShell ISE 控制台执行 CMD 脚本时,它工作得很好,但是,如果我从任务计划程序执行它,它会跳过弹出消息。
这个问题有什么解决办法吗?
powershell ×7
c# ×2
regex ×2
.net ×1
azure ×1
azure-bicep ×1
datagridview ×1
messagebox ×1
operators ×1
replace ×1
winforms ×1
wmi ×1