简体   繁体   English

更改Powershell脚本以将网站从IIS获取到Azure

[英]Changing Powershell Script for getting website from IIS to Azure

I wrote a simple Powershell script that grabs all the websites from IIS, loops over them, discovering all images in the directory tree, then sets the data to an Excel file and saves the file. 我编写了一个简单的Powershell脚本,该脚本从IIS捕获所有网站,对其进行循环,发现目录树中的所有图像,然后将数据设置为Excel文件并保存该文件。

Now, I need to change it to connect to all websites in an Azure subscription. 现在,我需要更改它以连接到Azure订阅中的所有网站。 How would I do that? 我该怎么做?

Here is the current script: 这是当前的脚本:

# Create the Excel doc
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $True
$xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlWorkbookDefault

# Add the Workbook
$Workbook = $Excel.Workbooks.Add()

# Name the Worksheet
$Worksheet= $Workbook.Worksheets.Item(1) 
$Worksheet.Name = 'Images'

# Set the title row
$TitleRow = 1

# Now, name the columns
$Worksheet.Cells.Item($TitleRow,1) = 'ImageTitle'
$Worksheet.Cells.Item($TitleRow,2) = 'WebSite'
$Worksheet.Cells.Item($TitleRow,3) = 'MetaData'
$Worksheet.Cells.Item($TitleRow,4) = 'URL'

# Make the cells bold
$Worksheet.Cells.Item($TitleRow,1).Font.Bold = $True
$Worksheet.Cells.Item($TitleRow,2).Font.Bold = $True
$Worksheet.Cells.Item($TitleRow,3).Font.Bold = $True
$Worksheet.Cells.Item($TitleRow,4).Font.Bold = $True


# Get the list of websites
$WebSites = Get-Website | Select Name, PhysicalPath

# Initialize the looping variable
$i = 2

#loop over the sites and write to console
ForEach ($Site in $WebSites)
{
    #get all files that are in the root directory -> children
    $Files = Get-ChildItem $Site.physicalPath -Force -Recurse -Include *.png, *.jpg, *.jpeg, *.bmp

    ForEach ($File in $Files)
    {   
        $Excel.Cells.Item($i,1) = $File.Name 
        $Excel.Cells.Item($i,2) = $Site.Name
        $Excel.Cells.Item($i,3) = ''
        $Excel.Cells.Item($i,4) = $File.FullName
        $i++ 
    }   
}

# Now, adjust the columns to fit
$UsedRange = $Worksheet.UsedRange   
$UsedRange.EntireColumn.AutoFit() | Out-Null

$Workbook.SaveAs("C:\Scripts\Images.xlsx", $xlFixedFormat)
$Excel.Quit()

Edit: 编辑:

As requested by Byron , here is the snippet of code for connecting to Azure through Kudu's Rest Api and getting files (I have copy and pasted the functions from the Kudu API module for clarity): 根据Byron的要求,以下是通过Kudu的Rest Api连接到Azure并获取文件的代码段(为清楚起见,我已复制并粘贴了Kudu API模块中的函数):

function Get-AzureRmWebAppPublishingCredentials($resourceGroupName, $webAppName, $slotName = $null){
    if ([string]::IsNullOrWhiteSpace($slotName)){
        $resourceType = "Microsoft.Web/sites/config"
        $resourceName = "$webAppName/publishingcredentials"
    }
    else{
        $resourceType = "Microsoft.Web/sites/slots/config"
        $resourceName = "$webAppName/$slotName/publishingcredentials"
    }
    $publishingCredentials = Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroupName -ResourceType $resourceType -ResourceName $resourceName -Action list -ApiVersion 2015-08-01 -Force
        return $publishingCredentials
}


function Get-KuduApiAuthorisationHeaderValue($resourceGroupName, $webAppName, $slotName = $null){
    $publishingCredentials = Get-AzureRmWebAppPublishingCredentials $resourceGroupName $webAppName $slotName
    return ("Basic {0}" -f [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $publishingCredentials.Properties.PublishingUserName, $publishingCredentials.Properties.PublishingPassword))))
}

function Fill-MimeTypes(){
    return @("image/gif", "image/x-icon", "image/jpeg", "image/png", "image/tiff", "image/bmp")
}

$MimeTypes = Fill-MimeTypes
[System.Collections.ArrayList]$Directories = @()


#Login to Azure Account
Login-AzureRmAccount

#Get the Azure subscription
Select-AzureRmSubscription -SubscriptionName [Your subscription name]

#Get the resource group name
####$resourceGroup = Get-AzureRmResourceGroup | where ()
$resourceGroupName = [Your resource group name]

#Get the WebApp name
$Resources = Find-AzureRmResource -ResourceType Microsoft.Web/sites -ResourceGroupNameContains [Your web app name]

ForEach($Resource in $Resources)
{
    #Get the WebAppName
    $WebAppName = $Resource.Name

    #Now, get the publishing creds
    $publishingCredentialsHeader = Get-KuduApiAuthorisationHeaderValue $resourceGroupName $WebAppName $null
    $ApiUrl = "https://$WebAppName.scm.azurewebsites.net/api/vfs/site/wwwroot/"

    #Now get the list of files in the wwwroot directory
    $InitialList = Invoke-RestMethod -Uri $ApiUrl -Headers @{Authorization=$publishingCredentialsHeader} -Method GET -ContentType "application/json"

After this line, we just have dummy processing code to show a tiny bit of what #the data looks like. 在这一行之后,我们只有虚拟处理代码来显示数据的一小部分。 Here, we then need to find all directories in wwwroot, hit #the API again, find directories in those directories, hit the API again, etc, #until we're done. 然后,在这里,我们需要在wwwroot中找到所有目录,再次单击#API,在这些目录中查找目录,再次单击API,依此类推,直到完成。

    ForEach($Item in $InitialList)
    {
        If($MimeTypes -Contains $Item.mime)       
        {

            Write-Host $Item.name
        }

        If ($Item.mime -eq "inode/directory")
        {
            $Directories.Add($Item.href)
        }
    }
}

ForEach($Directory in $Directories)
{
    Write-Host $Directory
}

This would probably be broken down into the following steps: 这可能会分解为以下步骤:

  1. Use Login-AzureRmAccount to log into the destination Azure subscription 使用Login-AzureRmAccount登录到目标Azure订阅
  2. Use the Find-AzureRmResource with resource type Microsoft.Web/sites type to find all "sites" in your subscription 使用资源类型为Microsoft.Web / sites的类型的Find-AzureRmResource查找订阅中的所有“站点”
  3. Iterate over that list with Get-AzureRmWebApp to extract the required information. 使用Get-AzureRmWebApp遍历该列表以提取所需的信息。

ARM API will only let you access the management plane, or the metadata of the resource. ARM API仅允许您访问管理平面或资源的元数据。

To list the files you will need to use the VFS API's provided by Kudu: https://github.com/projectkudu/kudu/wiki/REST-API 要列出文件,您将需要使用Kudu提供的VFS API: https : //github.com/projectkudu/kudu/wiki/REST-API

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM