当我在远程计算机上运行 PsExec 时,我总是达不到我想要的效果。在大多数情况下,我想要的理想情况是 a) 管理服务器上的日志,其中每个日志都有生成它的每台远程计算机的名称(例如 COMPNAME1.log、COMPNAME2.log 等)或 b) a使用我指定的任何名称在每台远程计算机上的日志文件。
当我尝试场景 (a) 时,我使用以下命令。
%SystemDrive%\path\to\psexec.exe @listofcomputers.txt -u DOMAIN\username cmd /c echo TEST >> \\server.company.tld\share\%computername%.log
Run Code Online (Sandbox Code Playgroud)
问题是它永远不会奏效。所有的计算机都只是写入日志,%computername%我在办公室执行 PsExec 的计算机就在其中。我想要的是 listofcomputers.txt 中特定于每台计算机的唯一日志,这些日志将正确使用远程环境变量中的主机名而不会出现问题。这甚至可能吗?它似乎对我不起作用。我试过了,语法显然是错误的。
%SystemDrive%\path\to\psexec.exe @listofcomputers.txt -u DOMAIN\username "cmd /c echo TEST >> \\server.company.tld\share\%computername%.log"
Run Code Online (Sandbox Code Playgroud)
PsExec 只是失败,说找不到系统文件(阅读:语法失败)。
至于场景 (b),它似乎是类似问题的变体。当我运行这样的命令时,它不起作用。
%SystemDrive%\path\to\psexec.exe @listofcomputers.txt -u DOMAIN\username "cmd /c echo %computername% >> \\server.company.tld\share\aggregated.log"
Run Code Online (Sandbox Code Playgroud)
我对 cmd.exe 控制台上的 PsExec 的远程路径和环境变量有什么不了解的地方(我什至还没有尝试过可怕的 PowerShell)。我知道这样的东西在批处理文件 ( cmd /c \\server.company.tld\share\runthis.bat) 中工作,但是在将命令作为参数执行时是否有原因它不起作用?我总是需要这个,但永远无法得到它!
假设我的路径是 C:\WINDOWS\system32\;C:\Program Files\Important\
SET NEW_PATH=C:\My\Dir\
SETX PATH "%PATH%;%NEW_PATH%"
Run Code Online (Sandbox Code Playgroud)
结果路径为:
C:\WINDOWS\system32\;C:\Program Files\Important\;C:\My\Dir"
注意路径末尾的引号。就好像 %NEW_PATH% 末尾的反斜杠逃脱了最后的引号。我需要引号,因为我的路径中有空格,但我不希望反斜杠被解释为转义字符。
在对 SETX 的调用中包含我的 PATH 的正确方法是什么?
我正在尝试从脚本中取消设置所有环境变量。该脚本运行良好,但如果我运行 env 它仍然显示所有变量集。
如果我从 CLI 运行命令,它会起作用并且变量未设置。
unset `env | awk -F= '/^\w/ {print $1}' | xargs`
Run Code Online (Sandbox Code Playgroud)
知道如何从脚本运行它吗?
另外,知道如何从脚本中获取 /etc/profile 吗?这也行不通。
我需要设置名称相同但路径不同的变量,具体取决于我的用户需要的实例。
稍后编辑:
好的,我最终得到了这个(不是很优雅,但无论如何)解决方案:
. script
Run Code Online (Sandbox Code Playgroud)
其中包含:
unset `env | awk -F= '/^\w/ {print $1}'|egrep -v "HOSTNAME|TERM|SHELL|HISTSIZE|SSH_CLIENT|SSH_TTY|USER|LS_COLORS|KDEDIR|MAIL|PATH|INPUTRC|PWD|LANG|HISTIGNORE|SSH_ASKPASS|TEST|SHLVL|HOME|LD_ASSUME_KERNEL|LOGNAME|SSH_CONNECTION|LESSOPEN|HISTTIMEFORMAT|G_BROKEN_FILENAMES|_"|xargs`
source env_variable_file
Run Code Online (Sandbox Code Playgroud)
谢谢!
作为我为客户处理的任务的一部分,我需要对企业登录脚本进行一些修改。Windows 命令行绝对不是我的专业领域,但我对大多数它都做得很好。但是,我有一个问题,我不知道该怎么做。
基本上,我需要将机器默认网关的 IP 地址获取到环境变量中(供以后在脚本中使用)。我知道它存在于ipconfig和 of的输出中tracert,并且我知道如何在他们的输出中找到我需要的确切行,但我不知道如何超越它。
例如,以下命令会产生如下输出:
>ipconfig|Find "Default Gateway"|Findstr/N "."|Findstr/B "1:"
1: Default Gateway . . . . . . . . . : 199.99.9.1
Run Code Online (Sandbox Code Playgroud)
但是现在我需要以某种方式仅从该文本行中提取 IP 地址,然后将其分配给环境变量。那么,如何从 Windows 命令行执行此操作?(Windows XP 及更高版本)。
scripting windows logon-scripts command-line-interface environment-variables
让 ASP.NET 查看更改PATH我已经更改了服务器上的
环境变量,并且需要 IIS / W3WP(即我的 ASP.NET 应用程序)来查看此更改。PATH我从另一个问题的答案中了解到(强调我的):
您必须回收 IIS 进程才能更新它
我的问题:如何“回收”IIS进程?
以下是我尝试解决此问题的方法:
使用iisreset
我尝试过一些东西。我尝试的第一件事是iisreset,但我的 asp.net 应用程序没有获取路径更改。为了确保我没有疯狂,我尝试重新启动服务器,这确实有效:应用程序现在拾取新的PATH.
我很想知道是否有一种方法可以防止仅仅因为我想要PATH在 ASP.NET 应用程序中进行更改而需要重新启动整个计算机...
可能出现的另一件事是我误解了另一个问题(那里的回答者iisreset在说“回收iis”时确实是指这个问题)?这并不能解释为什么iisreset对我的情况不起作用,而重新启动服务器却可以。iisreset我缺少什么选择吗?
在互联网上搜索
我也尝试寻找解决方案。从我第一次搜索我的PATH问题以来,没有找到任何真实的信息(除了上述问题)。我的第二组关于回收 IIS 进程的搜索效果不佳:我得到了有关iisreset以及它如何回收工作进程的信息。
重新启动 W3SVC
一位回答者建议重新启动 W3SVC(“万维网发布服务”),这似乎很有希望,但它对我也不起作用(但它可能对你有用!)。我通过更改路径尝试了该建议,使用新的命令提示符验证更改是否已完成,然后重新启动 W3SVC:我的 ASP.NET 应用程序没有骰子。重新启动后,新的命令提示符仍将显示更改后的路径,并且我的应用程序也将看到更改(因此更改本身实际上就是我想要的)。
另一位回答者提出了类似的建议,但有一个重要的区别:让服务保持停止状态一段时间,确认该站点不可用(以查看它实际上是 IIS 为该站点提供服务)。但这对我来说有同样的结果。
终止正确的 IIS 进程 …
我在 Centos 7.2 上使用 WSUS 模块和 Puppet Master。我的 Puppet 代理服务器运行的是 Windows Server 2012。
我想使用带有变量的清单。但是,当 Puppet Agent 服务器运行 puppet 代理时,它会显示“错误 400,语法错误”。我尝试重新编写清单和我能想到的每一个变化。我不断收到一些错误。
以下是清单的一个示例:
class excellent {
class { 'wsus_client':
$cool = 'Saturday'
server_url => 'http://acme.com',
auto_update_option => 'Scheduled'
scheduled_install_day => $cool,
scheduled_install_hour => 1,
}
}
Run Code Online (Sandbox Code Playgroud)
我试过在大括号 {} 中分配变量。我尝试使用 $LOAD_PATH、--custom-dir 和 FACTERLIB。但我无法弄清楚如何使用这三个中的任何一个。
我想在一个地方更改变量并在其父类的范围内使用它。我该怎么办?
我需要将多个环境变量代理/etc/environment到由supervisor.
以下配置对我有用,supervisor 3.0r1-1但supervisor 3.2.0-2报告错误:
environment=FOO=$FOO,BAR=$BAR,BAZ=$BAZ
Run Code Online (Sandbox Code Playgroud)
错误:值中的键/值对意外结束...
一些答案建议引用这些值,但如果我这样做,变量将不会扩展为实际值。
我究竟做错了什么?如何解决?
使用 PowerShell,我可以获得所有(当前进程)环境变量并对其进行格式化和排序:
gci env: | %{"{0}={1}" -f $_.Name,$_.Value} | sort
Run Code Online (Sandbox Code Playgroud)
这使:
a=foo
b=bar
c=baz
Run Code Online (Sandbox Code Playgroud)
但这给出了所有流程变量,我只想要用户变量,所以我这样做:
[Environment]::GetEnvironmentVariables("User") | %{"{0}={1}" -f $_.Name,$_.Value} | sort
Run Code Online (Sandbox Code Playgroud)
但这仅输出:
=
Run Code Online (Sandbox Code Playgroud)
该[Environment]::GetEnvironmentVariables("User")作品的东西之后是问题。
/etc/sysconfig我试图通过使用变量列表并在使用 systemd 嵌入式配置文件启动 Apache 时加载环境变量,使我的配置尽可能灵活且易于配置。由于环境变量在服务器启动后不会改变,因此我想通过使用 Apache 的IfDefine指令而不是常规If指令来提高性能和灵活性。
常规指令的问题之一<If>... </If>是块内的指令即使没有被执行也总是被计算。如果您使用环境变量作为参数,这一点非常重要,如下所示:
SVNParentPath ${MY_SVN_REPOSITORIES_PATH}
Run Code Online (Sandbox Code Playgroud)
${MY_SVN_REPOSITORIES_PATH}在这种情况下,如果计算结果为空字符串,Apache 将抛出错误并拒绝启动。我想在系统环境变量MY_SVN_REPOSITORIES_PATH为空或未设置时禁用服务存储库。我该怎么做呢?
假设我想编辑/etc/profile:
PYTHONPATH = /home/CURRENT_USER/
windows ×3
scripting ×2
apache-2.4 ×1
apache2 ×1
bash ×1
batch-file ×1
centos7 ×1
iis ×1
linux ×1
logging ×1
pipe ×1
powershell ×1
pstools ×1
puppet ×1
puppetmaster ×1
source ×1
supervisord ×1
unix ×1
wsus ×1