使用Powershell命令设置IIS日志记录设置

9
我正在创建一个PowerShell脚本,使用IIS Powershell管理控制台可以通过单个命令创建网站托管。
我已经拥有了所需的命令,可以创建IIS站点并为域名添加绑定等等...
不过我还需要解决的问题是如何将默认的日志目录从%SystemDrive%\inetpub\logs\LogFiles更改为自己的文件夹,该文件夹不在服务器启动盘上。
经过广泛搜索,我期望会发现以下类似伪PowerShell命令:
New-ItemProperty IIS:\Sites\MyNewSite -name logging -value @{format='W3C';directory='d:\sites\site\logs';encoding=UTF-8}

请问能否给我一个示例,说明如何在IIS Powershell管理控制台中更改日志文件夹?谢谢。
6个回答

20
Import-Module WebAdministration
Set-WebConfigurationProperty "/system.applicationHost/sites/siteDefaults" -name logfile.directory -value $logdir

谢谢。这个代码完美地解决了更改默认位置的问题。不过我每个站点都有单独的文件夹,这一点在我的问题中并没有表述清楚。您的代码帮助我在这篇论坛帖子中找到了答案:http://forums.iis.net/t/1174319.aspx - Webmonger
如果您在脚本中与其他IIS驱动器活动一起使用此功能,请确保IIS驱动器上的当前文件夹是根目录。这可以通过“cd IIS:\”来实现。例如,如果您在IIS:\SslBindings中,则会出现错误“Set-WebConfigurationProperty:在路径IIS:\SslBindings处未定义对象的配置。” - Prof Von Lemongargle

12

在测试这个帖子中的答案时,通过使用IIS Manager和PowerShell切换选项,我偶然发现了一些对我隐藏的东西。在IIS Manager中,选择“配置编辑器”并进行更改,允许IIS Manager生成并显示C#,JavaScript,AppCmd.exe和PowerShell中更改的脚本。只需单击“生成脚本”选项即可。

[用于IIS配置更改的自动生成脚本]


这很棒,尽管需要IIS 8.x或更高版本才能获得Powershell选项卡。 - dragon788

8

对于更改单个网站的logFile配置,原帖几乎是正确的。不要使用New-ItemProperty,而是使用Set-ItemProperty,像这样...

Set-ItemProperty "IIS:\Sites\$SiteName" -name logFile -value @{directory=$LogPath}

要更改服务器默认设置,请参阅Andy Schneider的答案

有关可用选项的更多信息,请参见此IIS.net文章


小世界...我注意到@Nathan-hartley的头像在旁边的选项卡中的另一个讨论。DSC听起来像是处理所有这些事情的新兴方法。 - Nathan

5

使用WebAdministration模块同样有效

Import-Module WebAdministration
$site = gi IIS:\Sites\MyNewSite
$site.Logging.format='W3C'
$site.Logging.directory='d:\sites\site\logs'
$site.Logging.encoding=UTF-8
$site | set-item

这可能适用于旧版的IIS或WebAdministration版本。然而,现在一个站点使用的属性是logFile。例如:$site.logFile.logFormat='W3C' - the berserker

2
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration")
$iis = new-object Microsoft.Web.Administration.ServerManager
$web = $iis.Sites["test"]
#set new logpath, must be existing
$web.LogFile.Directory = "F:\Logfiles\"
$iis.CommitChanges()

我在 Windows 2016 核心服务器上尝试了这个,但在我的目录中没有看到任何日志文件。 - Sridhar Sarnobat

1
如果您在单个服务器上托管多个站点,并希望它们都记录到同一个日志文件中,则该过程有所不同。需要一些挖掘才能找到线索这里这里,因此我想为其他有此需求的人留下描述。
以下两个语句将把所有网站的日志合并到文件夹e:\log\w3svc中。
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter 'system.applicationHost/log' -name CentralLogFileMode -Value 'CentralW3C'
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter 'system.applicationHost/log' -name centralW3CLogFile.directory -value 'e:\log'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接