如何通过PowerShell在Azure Web App中创建文件夹并添加文件
在Azure Web App中创建文件夹并添加文件的正确操作方式
嘿,我得先给你提个醒:你现在写的Test-Path和md命令是在本地PowerShell环境执行的,它们只会检查你自己电脑上的D:\home\site\wwwroot\webapps\ROOT路径,完全碰不到Azure Web App服务器里的文件系统,所以这部分逻辑是走不通的。
要操作Web App的远程文件系统,有两种靠谱的方法,我给你详细拆解:
方法1:用PowerShell直接在Web App沙箱里执行命令(推荐)
如果你用的是AzureRm模块(不过更建议升级到最新的Az模块,毕竟Rm已经被弃用了),可以用Invoke-AzureRmWebAppCommand直接在Web App的环境里跑命令:
# 你已经完成的登录和订阅选择步骤 Add-AzureAccount Select-AzureRmSubscription -SubscriptionName 'Demo' # 获取目标Web App对象 $webApp = Get-AzureRmWebApp -Name 'test--app' -ResourceGroupName 'TEST-POC-AUTOMATION' # 在Web App服务器上创建指定文件夹 Invoke-AzureRmWebAppCommand -WebApp $webApp ` -Command "if (!(Test-Path 'D:\home\site\wwwroot\webapps\ROOT')) { New-Item -ItemType Directory -Path 'D:\home\site\wwwroot\webapps\ROOT' }" ` -OutputFormat Text # 要是想创建文件,比如生成一个空白的test.txt,就这么写 Invoke-AzureRmWebAppCommand -WebApp $webApp ` -Command "New-Item -ItemType File -Path 'D:\home\site\wwwroot\webapps\ROOT\test.txt' -Value 'Hello from PowerShell'" ` -OutputFormat Text
如果已经升级到Az模块,把命令里的AzureRm替换成Az就行,比如Invoke-AzWebAppCommand。
方法2:调用Kudu REST API(适合更复杂的操作,比如上传本地文件)
如果需要上传本地文件到Web App,用Kudu API会更灵活:
第一步:先获取Kudu的发布凭据
$publishingCredentials = Get-AzureRmWebAppPublishingProfile -WebApp $webApp -OutputFile null | Select-Xml -XPath "//publishProfile[@publishMethod='MSDeploy']" $username = $publishingCredentials.Node.userName $password = $publishingCredentials.Node.userPWD $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password))) $kuduApiUrl = "https://$($webApp.Name).scm.azurewebsites.net/api/vfs/site/wwwroot/webapps/ROOT/"
第二步:创建目标文件夹
Invoke-RestMethod -Uri $kuduApiUrl ` -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} ` -Method Put
第三步:上传本地文件到这个文件夹
比如把你本地C:\temp\myfile.txt上传到Web App的目标文件夹里:
$localFilePath = "C:\temp\myfile.txt" $fileContent = Get-Content $localFilePath -Raw $uploadUrl = $kuduApiUrl + "myfile.txt" Invoke-RestMethod -Uri $uploadUrl ` -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} ` -Method Put ` -Body $fileContent ` -ContentType "text/plain"
几个重要的提醒
- 千万别把本地PowerShell环境和Web App的远程沙箱搞混了,本地的文件命令对Web App一点用都没有。
- 尽快把AzureRm模块升级到Az模块吧,微软已经停止对Rm的维护了,后续会有兼容性问题。
内容的提问来源于stack exchange,提问作者Mahesh Kava
相关产品推荐
相关产品推荐

