ASP.NET makes use of a temporary files directory to store files for Shadow Copying and Dynamic Compilation. A typical path will look like this. Note the hash on the end of the p
I know this is an old question, but in case someone still need it, this is the C# code that makes the trick. I guess it's not that hard to port to powershell.
string siteId = "/LM/W3SVC/3/ROOT"; // This can be composed by getting the site ID using the ServerManager (Microsoft.Web.Administration)
string physicalPath = "E:\\home\\mysite\\web\\";
string v_app_name = HashCode.GetString32((siteId + physicalPath).ToLower(CultureInfo.InvariantCulture)).ToString("x", CultureInfo.InvariantCulture);
string dir_name_32_bits_app = HashCode.GetString32(v_app_name).ToString("x8");
string dir_name_64_bits_app = HashCode.GetString64(v_app_name).ToString("x8");
Console.WriteLine("32 bits: " + dir_name_32_bits_app);
Console.WriteLine("64 bits: " + dir_name_64_bits_app);
The HashCode class:
public class HashCode
{
public static unsafe int GetString32(string s)
{
fixed (char* str = s)
{
char* chPtr = str;
int num = 0x15051505;
int num2 = num;
int* numPtr = (int*)chPtr;
for (int i = s.Length; i > 0; i -= 4)
{
num = (((num << 5) + num) + (num >> 0x1b)) ^ numPtr[0];
if (i <= 2)
{
break;
}
num2 = (((num2 << 5) + num2) + (num2 >> 0x1b)) ^ numPtr[1];
numPtr += 2;
}
return (num + (num2 * 0x5d588b65));
}
}
public static unsafe int GetString64(string s)
{
fixed (char* str = s)
{
int num3;
char* chPtr = str;
int num = 0x1505;
int num2 = num;
for (char* chPtr2 = chPtr; (num3 = chPtr2[0]) != '\0'; chPtr2 += 2)
{
num = ((num << 5) + num) ^ num3;
num3 = chPtr2[1];
if (num3 == 0)
{
break;
}
num2 = ((num2 << 5) + num2) ^ num3;
}
return (num + (num2 * 0x5d588b65));
}
}
}