小编Kah*_*Kah的帖子

使用PowerShell更改XML Element值

我只是在StackOverflow上找到有关如何更改XML元素的属性值的内容.

但是我们如何使用PowerShell更改元素本身的值?

我目前有:

XML

<Task>
  <Settings>
  ...
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>blablabla</Command>
      <Arguments>CHANGETHISVALUE</Arguments>
    </Exec>
  </Actions>
</Task>
Run Code Online (Sandbox Code Playgroud)

脚本

$filePathToTask = C:\Task.xml
$xml = New-Object XML
$xml.Load($filePathToTask)
$element =  $xml.SelectSingleNode("//Arguments")
$element.InnerText("newtext")
$xml.Save($filePathToTask)
Run Code Online (Sandbox Code Playgroud)

但是,我似乎无法在最后一个变量上使用方法.我究竟做错了什么?

编辑

  • 添加了代码

我得到的错误是你不能在空值表达式上调用方法

我认为我的问题在于:

$ElementToChange =  $xml.SelectSingleNode("//Arguments")
Run Code Online (Sandbox Code Playgroud)

哪个保持null,但我尝试了类似的方法.SelectNodes并且使用//Arguments标签但仍然没有成功

xml powershell scripting

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

PowerShell 脚本未与任务计划程序一起运行

所以我创建了一个安装 Windows 更新的 PowerShell 脚本,

您可能知道,在安装更新时,为了安装脚本,PC 可能必须重新启动(当仍有更新时)。

我实现的是在脚本开始时导入并在每次重新启动后运行脚本的任务(并在登录屏幕上安装剩余的脚本),直到没有更多的脚本剩下。

最后一次更新后,脚本将从任务调度程序中删除任务。

我的实现(下载/安装/添加任务/删除任务)完美运行。

只是我的脚本在重新启动后不会运行,我不知道为什么!

这是我的任务: 在此处输入图片说明

电脑重新启动后,脚本不再运行,任务调度程序中的错误状态为0x1

我做了一些谷歌搜索,发现参数可能是错误的(第三张图片当然路径是正确的)但我已经尝试过(在参数字段中):

  • (无引号)-文件路径
  • -ExecutionPolicy 绕过 - 文件路径
  • -NoProfile -ExecutionPolicy Bypass -file path -force
  • 将以上组合与添加或省略的引号混合在一起

任务调度程序没有启动我的脚本可能是什么问题?

谢谢

编辑

添加了作为批处理作业属性登录的屏幕截图:

在此处输入图片说明

powershell scheduled-tasks windows-server-2012-r2

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

使用字符串数组在 PowerShell 中的 Where-Object 中进行比较

我有一个以这种方式检索的 Active Directory 用户列表:

$users = Get-AdUser -Filter {(Enabled -eq "True" )} -Properties Description 
Run Code Online (Sandbox Code Playgroud)

问题是我有一组基于他们的描述的特定用户:

  • 管理员
  • 秘书
  • 邮递员

我所做的是创建这样的子列表:

$Admins = $users | Where-Object Description -eq 'Administrator'
Run Code Online (Sandbox Code Playgroud)

然而问题是,没有标准化。创建用户的人可以写“Admin”或“Administrator”或“adm”,...这会导致我的子列表不包含所有作为管理员的用户。

我所做的是创建了一个字符串数组:

$Admin_User_Strings = @("adm", "admin", "administrator")
Run Code Online (Sandbox Code Playgroud)

我想在我的子列表中使用这个数组,但这似乎不起作用:

$Admins = $users | Where-Object $Admin_User_Strings -contains Description 
Run Code Online (Sandbox Code Playgroud)

我得到错误:

Where-Object :找不到接受参数“System.Object[]”的位置参数。

所以我的问题是,我怎样才能让以下行:

$Admins = $users | Where-Object Description -eq 'Administrator'
Run Code Online (Sandbox Code Playgroud)

接受更多“管理员”输入方式?

powershell where-clause

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

根据字符列表设置文本框的文本

所以我有以下形式:

在此输入图像描述

我想要实现的目标如下:

输入名称后,我希望只需单击首字母文本框即可生成名称的首字母.

我找到了以下方法来获取字符串的第一个字符:

string EngineerName = tb_Name.Text.ToString();
EngineerName.Split(' ').ToList().ForEach(i => Console.Write(i[0] + " "));
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何将字符列表分配给文本textbox

我试过了:

private void Tb_Initials_Click(object sender, EventArgs e)
        {
            string EngineerName = tb_Name.Text.ToString();
            EngineerName.Split(' ').ToList().ForEach(i => Console.Write(i[0] + " "));

            tb_Initials.Text = EngineerName;

        }
Run Code Online (Sandbox Code Playgroud)

但这只是填写了完全相同名称的文本框...

c# split winforms

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

C中十分钟到十进制小时+循环

我正在尝试将分钟转换为十进制小时数并舍入到最接近的十五分钟(向上舍入).

基本上:

15分钟= 0.25小时

25分钟= 0.5小时

30分钟= 0.5小时

50分钟= 1小时

60分钟= 1小时

我没有在stackoverflow上找到任何相关内容,但另一个网站告诉我:

var hours =  Math.Round((minutes * 100 ) / 60.0);
Run Code Online (Sandbox Code Playgroud)

哪个不接近结果.

我知道我不能使用Math.Round()(因为它将它转换为int?).相同TimeSpan(因为它.TotalHours在a中给出double).

一个好的方法可以从将它除以60开始?

c# algorithm rounding ceil

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

C++时while和do之间的区别?

我希望有人能解释一下C++中的while和do之间的区别

我刚开始学习C++并且使用这段代码我似乎得到了相同的输出:

int number =0;

while (number<10)
{
cout << number << endl;
number++
}
Run Code Online (Sandbox Code Playgroud)

而这段代码:

int number=0;

do
{
cout << number << endl;
number++
} while (number<10);
Run Code Online (Sandbox Code Playgroud)

这两个计算中的输出都是相同的.所以似乎没有区别.我试图寻找其他的例子,但他们看起来很难理解,因为它包含了数学上的东西和其他我尚未学到的东西.我的书也对我的问题给出了一种迷幻的答案.

是否有一个更简单的例子来显示这两个循环之间的区别?

我很好奇

c++ loops while-loop

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

将 invoke 命令的输出封装在一个变量中 - PowerShell

我有一个在远程机器上安装远程桌面服务的脚本(来自 DC)。

我现在正处于检查连接代理(服务器)和连接主机(服务器)上是否安装了 RDS 的阶段。

我想使用 invoke-command 因为远程 powershell 会话似乎太复杂了。

这是我的代码:

$res = Invoke-Command -ComputerName "testpc.eil.local" -ScriptBlock {
if((Get-WindowsFeature -Name "Remote-Desktop-Services").Installed -eq 1)
{
   #i need this output (true or false or a string)
}
else
{
     #i need this output (true or false or a string)
}
}


Write-Host $res
Run Code Online (Sandbox Code Playgroud)

但我的问题是,如何将 invoke-command 中脚本块的输出封装在 DC 可以访问的变量中?如果 RDS 已成功安装或未能写入日志文件,我正在尝试写入

我们如何封装函数的输出并将其传递给运行它的机器?

谢谢

variables powershell scripting invoke-command storing-data

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

打印数组显示符号而不是字符C++

嘿,我在使用C++学习数组时遇到了问题.

我必须开发的程序是一个简单的数组,它读入一个名字(在char中)并在输入后打印它.

我的程序读取它但输出符号,而不是字符?有人可以解释一下我做错了什么吗?

Char name[10];
cout <<"Give a name: "; 
cin >> name[10];
cout << endl;

for (int i=0; i<strlen(name);i++)
{
cout << name[i];
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释我的代码中出错的地方并将其放在符号中,而不是我给出的普通字符吗?

c++ arrays symbols

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