Try using sys.master_files
tables. First query will give you everything expect for SpaceUsed and FreeSpace. Second will give you everything.
SELECT DB_NAME([database_id]) AS [Database Name]
,[file_id]
,name AS [Logical Name]
,physical_name
,type_desc
,state_desc
,CONVERT(BIGINT, size / 128.0) AS [Total Size in MB]
,CONVERT(DECIMAL(18, 2), size / 131072.0) AS [Total Size in GB]
,CASE WHEN max_size = -1 THEN -1
ELSE CONVERT(DECIMAL(18, 2), max_size / 131072.0)
END AS [Max Size in GB]
FROM sys.master_files WITH ( NOLOCK )
WHERE [database_id] >4
ORDER BY DB_NAME([database_id])
OPTION ( RECOMPILE );
EXEC sys.sp_MSforeachdb
'
use [?]
SELECT DB_NAME([database_id]) AS [Database Name]
,[file_id]
,name AS [Logical Name]
,physical_name
,type_desc
,state_desc
,CONVERT(BIGINT, size / 128.0) AS [Total Size in MB]
,CONVERT(BIGINT, FILEPROPERTY(NAME, ''SpaceUsed'') / 128.0) AS [Space Used in MB]
,CONVERT(BIGINT, size / 128.0) - CONVERT(BIGINT, FILEPROPERTY(NAME, ''SpaceUsed'') / 128.0) AS [Free Space in MB]
,CONVERT(DECIMAL(18, 2), size / 131072.0) AS [Total Size in GB]
,CASE WHEN max_size = -1 THEN -1
ELSE CONVERT(DECIMAL(18, 2), max_size / 131072.0)
END AS [Max Size in GB]
FROM sys.master_files WITH ( NOLOCK )
WHERE DB_NAME([database_id]) = ''?''
ORDER BY DB_NAME([database_id])
OPTION ( RECOMPILE );
'