标签: windows-scripting

脚本在哪里适合今天

我想知道脚本在今天的IDE和GUI世界中有什么地方.

我是编程的新手,我想知道在什么时候我应该为特定任务打开PowerShell终端.人们在这里使用什么脚本,以及对于使用C++/C#/ Java全职工作的现代开发人员有多重要?

shell scripting scripting-language windows-scripting

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

命令行脚本从多个TXT文件中删除标题行

从大型(10k +)组文本文件中删除第一行文本的最佳方法是什么.

shell batch-file windows-scripting

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

添加注销脚本

我有一些脚本,我希望每次用户注销时运行.我想创建一些以编程方式设置注销脚本的东西.例如,可以执行exe或cmd文件以将注销脚本添加到Windows执行的注销脚本列表中.因此,Windows API函数或Windows shell命令将更可取,但我找不到这样的函数或命令来帮助解决这个问题.

我检查了本地组策略编辑器在您使用它向组策略添加注销脚本时所做的注册表编辑,但是它确实做了很多我不能确定的模仿.例如,它进行了大量的注册表编辑,并且它在某些注册表项中使用数字代码,在某些值中使用二进制数据.我不知道这些值代表什么.

我已经尝试了GPEdit所做的更改的子集,希望这样做仍然可行.例如,我将对HKCU\Software\Policies\Microsoft\Windows\System\Scripts\Logoff所做的更改导出并导入到另一台PC上,但这不起作用,并且GPEdit MMC没有意识到我甚至已经制作了更改.

正如我所说,一组Windows API函数或Windows shell命令将是更好的,如果有人知道一些可能有帮助,但如果有人知道一种方法解码GPEdit以我可以模拟的方式制作的信息堆然后,只要它们稳定,我就不反对进行注册表更改.

无论我找到和使用什么解决方案,它都必须能够自动可靠,因为它将通过psexec远程执行到许多计算机上,并且它也将被包含在自动设置过程中,用于未来设置的PC.

不幸的是,对于谷歌而言,这似乎是一个难题,因为人们试图做的许多其他事情都有许多我要查询的关键词,但实际上并不是同一个主题.例如,关闭/注销挂钩用于运行应用程序或远程注销用户.

如果有人是Windows注册表或MMC向导,并且认为看到注册表的转储更改了GPEdit MMC在做同样的事情时会有所帮助那么就这么说了,我会让它可用,因为我已经捕获它.我怀疑这是要走的路,但我已经开始研究如何创建MMC管理单元工具; 我的想法是,也许GPEdit管理单元本身可以进行逆向工程,这样我就能以一种简单的方式看到它正在做什么.这不会快到任何地方,因为我看到的.adm文件中没有一个看起来有这样的设置,并且gpedit.msc文件似乎没有任何可以在明文部分中提供它的东西,尽管那里是一个看起来像胡言乱语的部分,所以也许那里有某种魔法.

windows winapi scheduled-tasks logoff windows-scripting

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

如何使用 PowerShell 通过 SSH 传输安全密码?

我正在编写通过 SSH 在远程 Windows 机器上执行命令或脚本的 PowerShell 模块,我正在寻找一种通过连接传输密码(或其他敏感信息)的方法。例如,假设我们有一个包含此调用的 PowerShell 脚本:

ssh user@host powershell -Command Invoke-Foo -Password $password
Run Code Online (Sandbox Code Playgroud)

正如我从我之前的一个问题中了解到的那样,这个例子表明安全性很差——密码,即使通过 SSH 加密,在两个系统上都显示为纯文本。为了防止这种情况,脚本将敏感数据存储为SecureStringPSCredential对象:

$password = Read-Host -AsSecureString
Run Code Online (Sandbox Code Playgroud)

...在本地机器上运行良好,但脚本无法通过SecureString基于文本的 SSH 协议将对象传递到远程 PowerShell 进程。

对于背景:我正在自动化一些过程,人们需要在通过 SSH 连接到机器时直接输入到 PowerShell 会话中,因此以前不需要这样做。

不幸的是,我们受到 PowerShell 4 的限制,因此较新的 PowerShell 版本提供的SSH 工具不可用,而且由于非技术原因,我们无法使用基于 WinRM 的 PowerShell 远程处理,就像我想的那样. 这意味着我不能依赖New-PSSessionInvoke-Command序列化本地对象并将其发送到远程会话。

在这些限制条件下,如何设计 PowerShell 脚本以通过 SSH 将敏感数据作为文本传递,然后远程接收数据而不暴露数据?有没有办法在每个系统上不安装加密实用程序和密钥的情况下做到这一点?

security ssh shell powershell windows-scripting

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

Windows 脚本 - 静默运行但等待完成/返回正确的代码

这是我的情况:

  • 我有一个需要很长时间才能运行的 BAT 文件(1 分钟到 70 分钟)
  • 我用 Windows 调度程序安排它每 10 分钟运行一次
  • 如果它仍在运行时再次调度,则不会发生任何事情(这很好)

我的问题是我需要我的 BAT 静默运行,但事实并非如此。因此,我想使用如下所示的 Windows 脚本启动它:

Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run chr(34) & "C:\Batch Files\syncfiles.bat" & Chr(34), 0
Set WshShell = Nothing
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我安排这个脚本时,它完成了工作,但立即返回,使 Windows 调度程序认为任务已经完成,而实际上 BAT 只是在某处自行运行。

因此,Windows 将在 10 分钟后再次重新安排作业并进行多次运行。

我需要的:

有没有办法告诉 Windows 脚本文件在继续/退出之前等待 .Run 命令的目标完成?基本上,我希望它表现得像我启动了另一个线程,然后在它上面调用了 join,所以它做的事情和 BAT 一样,但不显示控制台窗口。

其他解决方案

告诉我任何其他方式让这个 BAT 静默执行(powershell 命令,无论如何),我也会接受它作为解决方案。只是不要告诉我围绕它编写完整的 C++/C# 应用程序,这太过分了:)


运行: Windows Server 2008 R2

windows deployment batch-file scheduled-tasks windows-scripting

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

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

永久删除Windows Scripting Host(WSH)脚本中的徽标

我知道永久删除徽标的两种方法."官方"一:

cscript //Nologo //S
Run Code Online (Sandbox Code Playgroud)

将为当前用户保存当前命令行选项.

一个ftype具有管理员权限的方法:

ftype wsffile="%SystemRoot%\System32\CScript.exe" //nologo "%%1" %%*
ftype  jsfile="%SystemRoot%\System32\CScript.exe" //nologo "%%1" %%*  
ftype vbsfile="%SystemRoot%\System32\CScript.exe" //nologo "%%1" %%*  
Run Code Online (Sandbox Code Playgroud)

%只有在批处理文件中使用行时才需要使用双精度数.

后者将所有用户通过影响reg键HKEY_CLASSES_ROOT\<file>\Shell\Open\Command,在哪里<file>可以wsffile,jsfilevbsfile.

你知道存储 cscript //Nologo //S设置的位置吗?

vbscript wsh windows-scripting windows-console

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

JScript 是否支持字符串修剪方法?

在使用 JScript 开发 Windows 过程时,似乎某些字符串方法无法工作。在这个使用 trim 的例子中,第 3 行产生了运行时错误:

“对象不支持此属性或方法”。

我的代码:

strParent = "  a  ";
strParent = strParent.trim();
WScript.Echo ("Value: " + strParent);
Run Code Online (Sandbox Code Playgroud)

我傻吗?任何想法是什么问题?

windows wsh windows-scripting jscript

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

使用powershell和svn删除未版本控制的文件

我正在尝试编写一个构建脚本来使用Powershell检出代码.我需要能够使用SVN repo中的相应更改替换对工作副本所做的任何修改.这还包括删除在回购中删除但未在工作副本中删除的任何文件.

不幸的是,我不能做一个干净的结账,因为每次运行构建脚本时检查所有10GB的代码是低效的.我该怎么做?

我一直在尝试这些方面:

&$SVN_EXE revert $workingPath
&$SVN_EXE update $workingPath
$x = &$SVN_EXE status $localPath --no-ignore |  where {$_ -match "^[\?I]"} | %{$_ -replace "^[\?I]",""} # get the status, get any items with a ? and strip them out
$x | %{$_ -replace "[`n]",", "} # Replace newlines with commas
Remove-Item $x # Remove all the unversioned items
Run Code Online (Sandbox Code Playgroud)

我似乎无法将第3行的输出存储到$ x中,我不太确定其余部分是否可以实现.

我不确定这是否是正确的方法,但如果是,我似乎无法存储和解析SVN状态的输出.

有没有人有什么建议?谢谢!

svn version-control powershell scripting windows-scripting

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

获取传递给PowerShell中的函数的所有参数

我有一个功能如下.它根据传递的参数生成一个字符串.

function createSentenceAccordingly {
Param([Parameter(mandatory = $false)] [String] $name,
      [Parameter(mandatory = $false)] [String] $address,
      [Parameter(mandatory = $false)] [String] $zipcode,
      [Parameter(mandatory = $false)] [String] $city,
      [Parameter(mandatory = $false)] [String] $state)

    $stringRequired = "Hi,"

    if($name){
        $stringRequired += "$name, "
    }
    if($address){
        $stringRequired += "You live at $address, "
    }
    if($zipcode){
        $stringRequired += "in the zipcode:$zipcode, "
    }
    if($name){
        $stringRequired += "in the city:$city, "
    }
    if($name){
        $stringRequired += "in the state: $state."
    }

    return $stringRequired
}
Run Code Online (Sandbox Code Playgroud)

所以,基本上函数会根据传递的参数返回一些东西.我想尽可能地避免if循环并立即访问所有参数.

我可以访问数组或散列映射中的所有参数吗?因为我应该使用命名参数,所以不能在这里使用$ args.如果我可以一次访问所有参数(可能在$ args或hashamp之类的数组中),我的计划是使用它来动态创建返回字符串.

在将来,函数的参数将增加很多,我不想继续写每个附加参数的循环.

提前致谢, …

powershell powershell-2.0 windows-scripting powershell-3.0

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