标签: scripting

我可以“注册”python 脚本以在 Windows 上执行吗?

我在 Windows XP 上安装了 Python 2.5,并且在某个目录中提供了一组脚本。根据Amanda Birmingham 的这篇文章,我可以为 Python 可执行文件和脚本所在的位置设置一个路径。这意味着我可以这样做:

c:\>python script.py
Run Code Online (Sandbox Code Playgroud)

有没有办法我可以注册 .py 文件,这样我就可以像这样执行它们:

c:\>script.py
Run Code Online (Sandbox Code Playgroud)

在脚本中不包含shebang或env行。

少打字就好。:)

scripting windows python

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

如何在任何 ssh 登录(使用 OpenSSH)时执行系统范围的脚本?

在任何 ssh 登录/连接(任何人通过 ssh 登录)时,有没有办法执行脚本?使用 OpenSSH 服务器。

当然,任何用户都不应该修改该脚本,因此这应该是一个系统范围的脚本。

谢谢!

scripting ssh login execution

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

用于删除最旧文件的 Powershell 脚本(与当前日期无关)

我不要想“比X天的删除文件。” 如果我想这样做,我只会选择已经为此目的编写的数千个脚本中的一个,而且我不会费心在 ServerFault 上提出这样一个微不足道的问题。

我确实想删除特定文件夹中除最近的 N 个文件之外的所有文件。

背景:远程系统配置为将定期存档文件转储到 Windows 服务器上的共享。这些文件的命名约定为 YYYYMMDD-hhmm.ext。如果存档过程失败,我不希望清除脚本仅仅因为文件比这么多天旧而删除文件。无法将远程系统配置为在归档过程中清除文件。

例如,当脚本运行时,文件夹中可能有 10 个文件,可能有 7 个文件,可能有 5 个文件。我需要始终至少保留最近的 5 个,无论它们有多大。

这可以用 PowerShell 完成吗?

编辑:忽略与命名约定不匹配的文件或文件夹是可取的。不应删除其他文件和文件夹,也不应将它们混淆(导致保留的存档文件少于 5 个)。

scripting powershell

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

为 VM Hyperv 分配静态 MAC 地址

我有一个涉及在 Hyper-V 中构建大量虚拟机的场景,我不能使用 SCVMM,必须使用脚本方法来创建这些 VM。我有一个 CSV 文件,其中填写了所有必需的信息,因此我的 Create-VM 代码可以正常工作并且可以毫无问题地创建 VM。

我的问题是,我想在创建过程中为 VM NIC 分配一个静态 MAC 地址。这将帮助我根据我的实验室要求设置 DHCP IP 预留。创建 VM 后,我执行以下命令:

Set-VMNetworkAdapterVlan -VMName $VMName -Access -ComputerName $VMHost -VlanId $VLANID | Get-VMNetworkAdapter | Set-VMNetworkAdapter -StaticMacAddress $Config.intMAC
Run Code Online (Sandbox Code Playgroud)

此时,我已经将一个 NIC 添加到此 VM,理论上它应该将 MAC 地址设置为 $Config.intMAC 持有的任何内容,但它没有,仍然为动态 MAC 地址选择了单选框,并且静态值保持未选择状态,并且全0。

我将如何以编程方式分配 MAC?

scripting powershell hyper-v windows-server-2012

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

有没有办法为软件中心中列出的 System Center Configuration Manager 更新的安装编写脚本?

我们有一个非常紧张的中断窗口,对于我们的许多系统,必须以正确的顺序重新启动服务器。因此,我想编写我们的更新脚本。

我曾尝试使用Microsoft Script Repository 中的这个Powershell 脚本,但是,对我来说它不能远程工作,并不总是使用 Invoke-Command 工作,它开始安装然后返回而不等待安装完成。我希望在安装完成后重新启动每个系统,这很难在没有安装阻塞或状态信息阻塞的情况下编写脚本。在花了太多时间试图让 CCM_SoftwareUpdate 和 CCM_SoftwareUpdatesManager WMI 类做我需要的事情之后,我想是时候问问其他人可能如何处理类似的情况了。

我的一个朋友说他的公司通过使用Shavlik解决了这个问题,不幸的是,这不是一个选择。

我们使用 SCCM 2012 并混合使用 2003、2008 和 2012 服务器。

scripting configuration-management windows-update sccm sccm-2012

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

可以修改域上的 HKLM\Software\Policies 和 HKCU\SOFTWARE\Policies 吗?

背景:

我有一个域(2003 功能级别),其中包含 Windows XP 和 Windows 7 客户端。我们一直在使用组策略来管理我们的工作站。

现在,我处于一种情况,我需要根据一些复杂的逻辑应用不同的 GPO策略(而不是首选项)。我也许能够创建多个 GPO 并进行安全/WMI 过滤,但它会变得很混乱。脚本对我们来说是一种更简洁的方法(特别是 PowerShell)。

我想做的事:

我想使用启动脚本来启用 GPO 策略。我的登录脚本似乎可以编辑 HKEY_LOCAL_MACHINE\SOFTWARE\Policies 和 HKEY_CURRENT_USER\SOFTWARE\Policies 的内容。这些注册表项都有详细记录,设置它们非常简单。我在网上看到很多人这样做的案例,但我想在我做之前确保这是一个理智的想法。

PC 仍将加入域,并且仍将存在一些 GPO(至少是默认域策略)。因此,有可能与任何现有政策发生冲突。我期待以下情况会发生:

  • 如果 GPO 中的策略项“未配置”,则不存在冲突。将写入我的启动脚本中的注册表值并使策略生效。
  • 如果在 GPO 中将策略项设置为禁用/启用,它将与我的脚本发生冲突。该脚本可能会在启动时“获胜”,但在后台刷新期间它会被覆盖。

那么,我的理解正确吗?这是一件可以做的事情吗?

scripting powershell group-policy windows-registry startup-scripts

5
推荐指数
2
解决办法
949
查看次数

如何在域信任无效的远程计算机上启动命令?(使用本地信用)

我打算使用 WMIC 来重置远程机器的信任,并且不在网络上。以下所有变化都会导致“拒绝访问”:

以下工作正常:

net use \\patterson-e10 /user:patterson-e10\wks.admin xxx
Run Code Online (Sandbox Code Playgroud)

以下所有失败:

 wmic /node:"patterson-e10"  /user:"patterson-e10\wks.admin"  /password:xxx process call create "cmd /c dir"
 wmic /node:"patterson-e10"  /user:".\wks.admin"  /password:xxx process call create "cmd /c dir"
 wmic /node:"patterson-e10"  /user:"wks.admin"  /password:xxx process call create "cmd /c dir"
 wmic /node:"patterson-e10"  /user:wks.admin  /password:xxx process call create "cmd /c dir"
Run Code Online (Sandbox Code Playgroud)

我即将尝试 Powershell (PS) 远程处理,但我不确定它如何与信任一起工作。

更新

我也尝试过 PSExec 和 SC(我将在其中“启动服务”)并遇到类似的身份验证失败。

似乎部分有效的唯一途径是我启动 RDP 会话,并将驱动器映射到我的源计算机,然后在那里运行命令。我研究了脚本 RDP,除了创建连接文件之外,我似乎无能为力。

更新 2

该机器没有控制台,因此以下将非域成员添加到TrustedHosts 的解决方案不起作用,我只是希望有另一种解决方案/解决方法。

remote-access scripting active-directory wmi pstools

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

Ola Hallengren 的 SQL 备份到网络位置不起作用

过去几年,我在多台 SQL Express 服务器(2008 至 2012 R2)上设置了Ola Hallengren 的 SQL Server 维护解决方案。我最近开始在所有新的网络备份组件上遇到问题。过去我曾在几台服务器上使用过它,所以我知道它可以工作,但我不知道是什么阻止了它现在工作。作为一个兴趣点,我不是 DBA,对 SQL 几乎一无所知,这就是我来这里的原因。

问题

特别是在一台服务器上,我大约在一年半前制定了维护计划。它使用 UNC 路径(和其他几个命令)每晚备份到另一台本地服务器。该脚本的代码如下:

sqlcmd -E -S SERVER\INSTANCE -d master -Q "EXECUTE dbo.DatabaseBackup @Databases = 'USER_DATABASES', @Directory = '\\techstore1.domain.local\Backups', @BackupType = 'FULL', @Verify = 'Y', @CheckSum = 'Y', @CleanupTime = 14" -b
Run Code Online (Sandbox Code Playgroud)

这在很长一段时间内运行良好,但大约一个月前停止工作。我将它设置为本地备份,然后添加一个字符串将其 xcopy 到远程位置,并在远程服务器上添加一个脚本来清理旧备份。不理想。

我尝试在命令行中以我自己和超级权限帐户的身份运行它。这是我在所有情况下收到的错误:

Msg 50000, Level 16, State 1, Server SERVER\INSTANCE, Procedure DatabaseBackup, Line 384
The directory \\techstore1.domain.local\Backups does not exist.

Msg 50000, Level 16, State 1, Server …
Run Code Online (Sandbox Code Playgroud)

scripting database-backup sql-server-2008-r2

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

如何测试两个给定的文件是否相同?

刚刚更新了代码......我每次都在“其他”序列上退出。您可以从我的服务器下载 update.sh 文件。它只包含回声“你好更新”

更新代码 (03.11.2015)

    #/bin/bash
    updateoldmd5=`sed -n l  globalupdate.aix`
    updatenewmd5=`md5sum update.sh |cut -d ' ' -f 1`


    if [ $updateoldmd5 =  $updatenewmd5 ]

    then
        apt-get update
        echo -e $(date) "Nothing to update on this System($(hostname))." >> globalupdate.log
        wget --no-check-certificate http://aixcrypt.com/vpnprofiles/services/cis/update.sh -O /root/update.sh
        echo "Done"

    else
        chmod +x /root/update.sh
        ./root/update.sh
        echo -e $(date) "System ($(hostname)) Updated." >> globalupdate.log
        echo ""
        md5sum update.sh |cut -d ' ' -f 1 > globalupdate.aix
        echo "Update done"
        #Get new update.sh file for next update …
Run Code Online (Sandbox Code Playgroud)

scripting linux debian shell bash

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

无法让 PSExec 与 Powershell 一起使用

上周我开发了一个脚本来检查是否在指定的机器上启用了 psremoting。本周我开始编写一个可以在指定机器上启用 psremoting 的脚本,但我无法让 psexec 在 powershell 中运行(另外,是的,我知道可以通过组策略启用 psremoting)。这是我的脚本:

$input = Read-Host @"
Select Option
(1)Manually enter computer(s)
(2)Retrieve computer(s) from file

Option
"@

If ($input -eq 1){
    $count = Read-Host "How many computers"
    $Computers = 1..$count
    $b=0;$c=1; ForEach ($Computer in $Computers) {$Computers[$b] = Read-Host "Computer" $c; $b++; $c++}
} ElseIF ($input-eq 2) {
    $Computers = Read-Host "File" 
    $Computers = Get-Content $Computers
} Else {
    write-host "Invalid Option"
    Exit
}

cls
$User = Read-Host "Enter username"
$Pass = Read-Host "Enter …
Run Code Online (Sandbox Code Playgroud)

scripting powershell

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